在ASP.NET MVC 2中本地化错误消息(默认validation属性)

我正在开发一个多语言网站,我希望本地化大多数ValidationAttribute的validation错误消息,例如[Requried]

我知道这可以像Phil Haack在本文中所展示的那样完成。

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

但我想按照我在这里使用自定义validation属性的方式自定义错误消息:

 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] public sealed class ValidateminRequiredNonalphanumericCharactersAttribute : ValidationAttribute { private const string _defaultErrorMessage = // Message From Resource Here ( i will be using two variables in this message ) private readonly int _minnonalphanumericCharactersCounter = Membership.Provider.MinRequiredNonAlphanumericCharacters; public ValidateminRequiredNonalphanumericCharactersAttribute() : base(_defaultErrorMessage) { } public override string FormatErrorMessage(string name) { return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, name, _minnonalphanumericCharactersCounter); } public override bool IsValid(object value) { string valueAsString = value as string; if (String.IsNullOrEmpty(valueAsString)) return false; int nonalphanumericCharactersCounter = 0; char[] password = valueAsString.ToCharArray(); foreach (char c in password) { if (!char.IsNumber(c) && !char.IsLetter(c)) nonalphanumericCharactersCounter++; } return (nonalphanumericCharactersCounter >= _minnonalphanumericCharactersCounter); } } 

任何的想法 ?

我弄清楚它是如何完成的。 它非常简单直接。

我做的是我创建了自己的自定义RequiredAttribute 。 而不是使用内置的RequiredAttribute

唯一的缺点是您需要自己实现该validation器的逻辑。

我知道有些人可能认为重新实施已经存在的东西是一个头脑。 (重新发明轮子)但这样我将完全控制Validator逻辑和错误消息。

如您所见,逻辑在下面的IsValid()方法中实现。

这是我创建的RequiredAttribute类:

 [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = true, Inherited = true)] public sealed class RequiredAttribute : ValidationAttribute { private const string _defaultErrorMessage = // Error Message // Notice that i can include the filed name in the error message // which will be provided in the FormatErrorMessage Method public RequiredAttribute() : base(_defaultErrorMessage) { } public override string FormatErrorMessage(string name) { return String.Format(CultureInfo.CurrentUICulture, ErrorMessageString, name); } public override bool IsValid(object value) { if (value == null || String.IsNullOrWhiteSpace(Convert.ToString(value))) return false; else return true; } } 

现在,在使用Validator时,您需要提供新类的完整引用,因为它将与上面示例中的默认内置System.ComponentModel.DataAnnotations.RequiredAttribute类冲突。

在我的情况下,这是最终结果的样子:

  [Amaly.Data.Validators.Required] public string Username { get; set; } 

希望这很有用。