4

我正在使用System.ComponeneModel.DataAnnotations属性,如Required和StringLength。是否有可能本地化其全球错误信息?全局本地化验证

我知道我能做到这一点

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))] 

但这样做,我到处都用所需的属性是只是疯狂。此外,我想避免这样的东西:

public class LocalizedRequiredAttribute : RequiredAttribute { 
    public LocalizedRequiredAttribute() 
     : base() { 
     ErrorMessageResourceName = "Required"; 
     ErrorMessageResourceType = typeof(Resources.Validation); 
    } 
} 

(但如果没有任何其他的方式,我会满足于这一点)

+0

用相同的接受的答案类似的问题http://stackoverflow.com/questions/2480557/providing-localized-error-messages-for-non-attributed-model-validation-in-asp- ne – 2012-07-05 21:55:19

回答

8

据我所知,你需要或者自定义属性或指定ErrorMessageResourceName和ErrorMessageResourceType属性。还有另一种可能性detailed here

创建 App_GlobalResources文件一个全球性的资源类,并设置 DefaultModelBinder.ResourceClassKey到 这个类的名称(例如, 如果您做了“Messages.resx”,然后设置将ResourceClassKey设置为“Messages”( ))。

有两个字符串就可以在MVC 2覆盖 :

  • 为 “PropertyValueInvalid”的字符串值时使用 数据输入的用户不 与数据类型兼容(例如,输入 整数字段的“abc”)。对此的默认消息 是:“值”{0}“不是对{1}有效的 。”

  • 用户没有输入用于 字段,它是不可为空的任何数据时 “PropertyValueRequired”字符串值使用( 例如,整数字段)。默认消息为 :“值 是必需的。”

重要的是要注意 如果您有 的 DataAnnotationsModelValidatorProvider 在验证供应商名单 (这是默认设置)认为,第二种情况是很重要的,那么你 将永远不会看到第二个消息。 该供应商认为非可选字段 ,并增加了一个隐含的[必需] 属性给他们,让他们 的消息将带有明确的[必需] 属性等 领域保持一致,并确保您获得 客户端验证对于所需的 字段。

+0

是否有可能在不使用资源文件的情况下替换这些消息?我需要拦截生成这些消息的地方并设置来自数据库的本地化错误消息。谢谢。 – 2016-07-19 14:30:21

1

对于MVC3请参阅DataAnnotationsResources。它是“RequiredAttribute_ValidationError”等等。 您可以通过安装.NET Framework语言包来解决此问题。

参见