首先,对于Microsoft MVC团队感到遗憾,因为没有简单的本地化数据注释验证消息的解决方案。这花了我很多时间,最后找不到简单的解决方案!
我最终决定继承RequiredAttribute
进行本地化。所以我这样做了:
public class MyRequiredAttribute : System.ComponentModel.DataAnnotations.RequiredAttribute
{
public MyRequiredAttribute()
: base()
{
this.ErrorMessageResourceType = typeof(Resources.DataAnnotationDefaults);
this.ErrorMessageResourceName = "Required";
}
}
我在DataAnnotationDefaults.resx
文件中提供了我的本地化消息。
所以我可以简单地使用它
[MyRequired]
public int UnitCode { get; set; }
但问题是:它不适用于客户端,也不适用于服务器端。为什么?我错过了什么?
令人惊讶的是,以下行也可以在客户端工作!
[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(DataAnnotationDefaults))]
public int UnitCode { get; set; }
如果有人可以帮助我,我会很高兴和感激。
答案 0 :(得分:2)
您需要了解验证在MVC和.NET中的工作原理。 DataAnnotation是一个通用的验证库,可以在各种应用程序中使用,而不仅仅是MVC。
因此,MVC包含用于MVC的不同类型的适配器,用于添加对DataAnnotations的支持。客户端适配器专门针对System.ComponentModel.DataAnnotations
中定义的属性。
因此,您需要创建自己的适配器以使其与派生属性一起使用。我写了一篇关于它的blog entry。
更简单的方法是使用我的localized metadata provider。