我正在开发一个多语言网站,我想本地化大多数 ValidationAttribute 的验证错误消息,例如[Requried]
我知道可以这样做菲尔·哈克 http://haacked.com已在此显示article http://haacked.com/archive/2009/12/12/localizing-aspnetmvc-validation.aspx.
[Required(ErrorMessageResourceType = typeof(Resources),
ErrorMessageResourceName = "Required")]
但我想按照我在此处使用自定义验证属性的方式自定义错误消息:
[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
.
唯一的缺点是您需要自己实现该验证器的逻辑。
我知道有些人可能认为重新实现已经存在的东西是多余的。 (重新发明轮子)但这样我就可以完全控制验证器逻辑和错误消息。
正如你所看到的,逻辑是在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;
}
}
现在,在使用验证器时,您需要提供新类的完整引用,因为它将与默认内置类发生冲突System.ComponentModel.DataAnnotations.RequiredAttribute
在我上面的例子中的类。
就我而言,最终结果如下:
[Amaly.Data.Validators.Required]
public string Username { get; set; }
希望这有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)