繁体   English   中英

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

[英]Localizing Error Messages In ASP.NET MVC 2 (Default Validation Attributes)

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

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

[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

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

我知道有些人可能会认为重新实施已经存在的东西已经过头了。 (重新发明轮子)但这样我将完全控制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; }

希望这很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM