簡體   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