全局本地化验证

Luk*_*tný 4 validation attributes localization data-annotations asp.net-mvc-3

我正在使用System.ComponeneModel.DataAnnotations属性,例如Required和StringLength.是否可以全局本地化其错误消息?

我知道我能做到这一点

[Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(Resources.Validation))]
Run Code Online (Sandbox Code Playgroud)

但到处都这样,我使用必需的属性将是疯狂的.另外我想避免像这样的东西:

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

(但如果没有其他办法,我会满足于此)

Dar*_*rov 8

AFAIK您需要自定义属性或指定ErrorMessageResourceName和ErrorMessageResourceType属性.还有另一种可能性,这里详细:

在App_GlobalResources中创建一个全局资源类,并将DefaultModelBinder.ResourceClassKey设置为此类的名称(例如,如果您创建了"Messages.resx",则将ResourceClassKey设置为"Messages").

您可以在MVC 2中覆盖两个字符串:

  • 当用户输入的数据与数据类型不兼容时(例如,为整数字段键入"abc"),将使用"PropertyValueInvalid"的字符串值.默认消息是:"值"{0}"对{1}无效."

  • 当用户未输入不可为空的字段的任何数据时(例如,整数字段),将使用"PropertyValueRequired"的字符串值.默认消息是:"需要一个值."

在第二种情况下需要注意的是,如果您的验证器提供程序列表(默认情况下)中有DataAnnotationsModelValidatorProvider,那么您将永远不会看到第二条消息.此提供程序查看非可选字段并向其添加隐含[Required]属性,以便其消息与具有显式[Required]属性的其他字段保持一致,并确保您获得所需字段的客户端验证.