【发布时间】:2011-06-18 17:25:16
【问题描述】:
对于我的应用程序(ASP.NET MVC 3.0 RTM,Razor View Engine),我想为我的模型使用 DataAnnotations。如果我将模型类保留在 Web 项目中,我可以在 App_GlobalResources 或 App_LocalResources 中拥有 resx 资源,而无需将 .resx 嵌入到 .resources 文件中。
忽略新生成的 AppDomain 和其他注意事项,这是理想的,因为更改本地化资源中的一些小问题(例如拼写错误或不正确的翻译)不需要编译。
但是,在将我的模型移动到类库后,我看不到任何方法可以将 .resx 文件保留为输出并仍然使用 DataAnnotations 属性。我错过了什么吗?
问题在于属性查找资源的方式。例如,“名称”属性可能如下所示:
[Display(Name = "MyEntity_Name", ResourceType = typeof(Validations))]
[Required(ErrorMessageResourceName="MyEntity_Name_Required",
ErrorMessageResourceType = typeof(Validations))]
[StringLength(150, MinimumLength = 2)]
public string Name { get; set; }
在过去的 24 小时内,对强类型资源包装器的要求已成为我存在的祸根。
我尝试对包装器进行通用化,但似乎验证属性专门寻找包装器上的一个属性,该属性名为 MyEntity_Name 用于 DisplayAttribute,MyEntity_Name_Required 用于RequiredAttribute。我还没有深入研究 DataAnnotations 代码,看看是否有一些魔法可以发挥作用。我希望其他人遇到这个并且有任何想法。
问题
是否可以在类库中使用 DataAnnotations ValidationAttributes(包括 DisplayAttribute)而不将 resx 文件嵌入到.resources 文件中?
陷阱:(
将来,我想以最少的编码工作从 resx 迁移到数据库驱动的资源。由于资源有限(没有双关语),我现在不能这样做。所以,我想避免绕过 ResourceProvider。另外,我想避免重写或包装 System.ComponentModel.DataAnnotations 命名空间中的所有属性。
【问题讨论】:
-
看起来只有 WebForms 视图中的编译时资源会从 .resx 中提取,构建操作为
Content,否则必须将它们标记为Embedded Resource,DataAnnoations 才能使用它们。
标签: localization asp.net-mvc-3 data-annotations embedded-resource resx