ASP.NET MVC: Добавление пользовательского ErrorMessage, который включает DisplayName к пользовательскому ValidationAttribute

Я использую ASP.NET MVC с DataAnnotations. Я создал следующий пользовательский ValidationAttribute, который хорошо работает.

public class StringRangeAttribute : ValidationAttribute
{
    public int MinLength { get; set; }
    public int MaxLength { get; set; }

    public StringRangeAttribute(int minLength, int maxLength)
    {   
        this.MinLength = (minLength < 0) ? 0 : minLength;
        this.MaxLength = (maxLength < 0) ? 0 : maxLength;
    }

    public override bool IsValid(object value)
    {            
        //null or empty is <em>not</em> invalid
        string str = (string)value;
        if (string.IsNullOrEmpty(str))
            return true;

        return (str.Length >= this.MinLength && str.Length <= this.MaxLength);
    }
}

Однако сообщение об ошибке, которое появляется, является стандартом "Поле *, недопустимо". Я хотел бы изменить это, чтобы быть: "[DisplayName] должен быть между [minlength] и [maxlength]", однако я не могу выяснить, как получить DisplayName или даже название поля из этого класса.

Кто-либо знает?

6
задан No Refunds No Returns 6 January 2010 в 22:29
поделиться

1 ответ

слегка модифицированный StringLengthAttribute:

public class StringRangeAttribute : ValidationAttribute
{
    // Methods
    public StringRangeAttribute(int minimumLength, int maximumLength)
        : base(() => "The {0} must be between {1} and {2} chars long.")
    {
        MaximumLength = maximumLength;
        MinimumLength = minimumLength;
    }

    public override string FormatErrorMessage(string name)
    {
        return string.Format(CultureInfo.CurrentCulture, ErrorMessageString, new object[] { name, MinimumLength ,MaximumLength });
    }

    public override bool IsValid(object value)
    {
        if (value != null)
        {
            return (((string)value).Length <= MaximumLength) && (((string)value).Length >= MinimumLength);
        }
        return true;
    }

    public int MaximumLength { get; set; }
    public int MinimumLength { get; set; }
}
9
ответ дан 10 December 2019 в 02:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: