Как получить отображаемое имя свойства из пользовательского атрибута - PullRequest
4 голосов
/ 07 ноября 2010

Я пытаюсь создать атрибут проверки минимальной длины, который заставит пользователей вводить указанное минимальное количество символов в текстовое поле

    public sealed class MinimumLengthAttribute : ValidationAttribute
        {
            public int MinLength { get; set; }

            public MinimumLengthAttribute(int minLength)
            {
                MinLength = minLength;
            }

            public override bool IsValid(object value)
            {
                if (value == null)
                {
                    return true;
                }
                string valueAsString = value as string;
                return (valueAsString != null && valueAsString.Length >= MinLength);

  }
    }

В конструкторе MinimumLengthAttribute я хотел бы установить сообщение об ошибке следующим образом:

ErrorMessage = "{0} должно быть длиной не менее {1} символов" *

Как получить отображаемое имя свойства, чтобы заполнить заполнитель {0}?

Ответы [ 2 ]

6 голосов
/ 26 июля 2012

Заполнитель {0} автоматически заполняется значением [Display(Name="<value>")], и если атрибут [Display(Name="")] не существует, он принимает Имя свойства.

2 голосов
/ 07 ноября 2010

Если ваше сообщение об ошибке содержит более одного заполнителя, ваш атрибут должен также переопределить метод FormatErrorMessage , например, так:

public override string FormatErrorMessage(string name) {
    return String.Format(ErrorMessageString, name, MinLength);
}

И вам следует вызвать одну из перегрузок конструктора дляукажите сообщение об ошибке вашего атрибута по умолчанию:

public MinimumLengthAttribute()
    : base("{0} must be at least {1} characters long") {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...