我在Account.CS文件中声明资源时遇到问题。这是我的代码:
[Required(ErrorMessageResourceName= typeof @DbRes.T("Account", "EmailAddress")]
[Required(ErrorMessageResourceName = (@DbRes.T("EmailAddress", "Account")))]
[DataType(DataType.EmailAddress)]
[Display(Name = DbRes.T("EmailAddress", "Account"))]
public string EmailAddress { get; set; }
答案 0 :(得分:3)
你绝对可以使用Westwind.Globalization和MVC以及验证属性。 MVC验证依赖于强类型资源和类型映射,以便使其工作you have export strongly typed resources from your dbResource file。这将为db资源中的每个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或plain 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视图。
维基上有一个主题也描述了这一点:
答案 1 :(得分:2)
Westwind Documentation: Westwind.Globalization ASP.NET MVC Support说:
MVC应用程序最好不使用ASP.NET资源 App_LocalResources和App_GlobalResources的体系结构。因为 MVC没有使用控件的任何控件查找优点 基于Web窗体的提供程序系统提供的声明性标记 在MVC应用程序中丢失了。相反,MVC应用程序往往起作用 最好使用.NET项目中定义的传统资源 暴露为强类型资源。
所以似乎Westwind没有解决方案,除了使RESX文件编辑可能更容易。
<强> //编辑:强> 请参阅Ricks评论:[...]您可以从db资源生成强类型资源,然后以相同的方式使用它们。 [...] Wiki上有一个单独的主题。