2010-09-03 62 views
5

我想使用数据注释来处理我的Silverlight应用程序中的验证。内置的验证属性(主要是StringLength和Required)非常棒,让生活变得非常简单。但是,他们似乎有一个关键缺陷。例如,如果我的语言环境设置为fr-CA,则验证例外仍为英语 - “名称字段是必需的”,“字段名称必须是最大长度为20的字符串”等。Silverlight 4:内置数据注释验证异常的本地化

这是一个主要的问题。这意味着如果我想要内置验证属性的本地化错误消息,我必须在业务层的每个validatable属性中手动添加ErrorMessage/ErrorMessageResourceType到的每个验证属性,并为每个错误消息手动添加翻译后的字符串。

所以......我错过了什么吗?有没有办法自动将内置的验证属性本地化?还是其他更简单的方法呢?还是我完全不幸运,并坚持手动路线?

任何意见或想法,将不胜感激。

回答

6

好吧,我通过简单的子类化内置的验证属性来解决这个问题。问题解决了!

internal class LocalizedStringLengthAttribute : StringLengthAttribute 
{ 
    public LocalizedStringLengthAttribute(int maximumLength) 
     : base(maximumLength) 
    { 

    } 

    public override string FormatErrorMessage(string name) 
    { 
     return String.Format(CultureInfo.CurrentUICulture, LanguageResources.Resource.Error_StringLength, name, MaximumLength); 
    } 
} 
+0

我把你的解决方案与修改WCF RIA生成代码的能力结合起来(http://www.scip.be/index.php?Page=ArticlesNET36)。现在我可以用我的实现来替换生成的[Required]属性。感谢您分享这一点! – Nasser 2012-08-14 13:12:11