您绝对可以将 Westwind.Globalization 与 MVC 和验证属性一起使用。MVC 验证依赖于强类型资源和类型映射,因此为了使其工作,您必须从 dbResource 文件中导出强类型资源。这将为您的数据库资源中的每个 ResourceSet 创建一个自定义强类型类。
强类型资源类如下所示:
public class Resources
{
public static System.String NameIsRequired
{
get
{
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
return (System.String) HttpContext.GetGlobalResourceObject("Resources","NameIsRequired");
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
return ResourceManager.GetString("NameIsRequired");
return DbRes.T("NameIsRequired","Resources");
}
}
public static System.String AddressIsRequired
{
get
{
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
return (System.String) HttpContext.GetGlobalResourceObject("Resources","AddressIsRequired");
if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
return ResourceManager.GetString("AddressIsRequired");
return DbRes.T("AddressIsRequired","Resources");
}
}
... any others in the same resource set
}
这与标准 .Resx 强类型类非常相似,不同之处在于您可以使用同一个类(DbRes ResourceManager、dbRes ASP.NET ResourceProvider 或普通 Resx)访问各种不同类型的资源。
然后,您可以像在 ASP.NET MVC 模型验证属性中引用标准 Resx 强类型资源一样引用强类型资源:
public class ViewModelWithLocalizedAttributes
{
[Required(ErrorMessageResourceName = "NameIsRequired", ErrorMessageResourceType = typeof(Resources))]
public string Name { get; set; }
[Required(ErrorMessageResourceName = "AddressIsRequired", ErrorMessageResourceType = typeof(Resources))]
public string Address { get; set; }
}
示例项目中有一个示例 - 打开 Models 文件夹以查看模型和 ModelAttributesFromResources.cshtml 视图,该视图使用具有本地化值的视图。
wiki 上有一个主题也描述了这一点:
https://github.com/RickStrahl/Westwind.Globalization/wiki/Model-Validation-Message-for-ASP.NET-and-EntityFramework