Поведение атрибута StringLength
У меня есть такой атрибут, который проверяет минимальную и максимальную длину строки:
[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]
public string PropertyName {get; set;}
В основном это то, как он объявляется в шаблоне asp.net mvc 3.0 по умолчанию (у них просто Максимум 100).
Итак, если строка содержит менее 3 символов, сообщение об ошибке отображения будет
"The PropertyName must be at least 3 characters long."
Поэтому я не вижу никаких проблем с тем, что в таком случае
Но если длина строки будет больше 10, отображаемое сообщение будет
"The PropertyName must be at least 3 characters long."
Так что сейчас становится не правильно.
Но если я изменю шаблон сообщения на что-то вроде этого:
[StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long and maximum {1} characters long", MinimumLength = 3)]
Сообщение об ошибке для обоих случаев будет таким:
"The PropertyName must be at least 3 characters long and maximum 10 characters long"
И это не так хорошо
1) Сообщение длинное
2) Было бы лучше отобразить отдельное сообщение для каждого случая, так и вопрос: как я могу сделать шляпу?
Есть ли способ показать два разных сообщения, одно сообщение, если длина меньше минимальной, а другое сообщение - больше, чем максимум?
Я мог видеть только один способ исправить это объявление двух отдельных атрибутов StringLength
, которые будут проверять минимум для другого для максимального значения, но невозможно добавить два одинаковых атрибута в метод, также я бы пошел с MinLength
и MaxLength
, но они не генерируют ненавязчивые атрибуты. Похоже, я должен написать свой собственный атрибут проверки
Но было бы здорово отображать два разных сообщения в каждом случае (мин и макс) для одного атрибута проверки StringLength
, если бы это было возможно, что вы думаете?
Ответы
Ответ 1
Вы можете использовать атрибуты MinLength, MaxLength. Это яснее, чем два атрибута StringLength
[MinLength(3, ErrorMessage="The {0} must be at least {2} characters long")]
[MaxLength(10, ErrorMessage="The {0} must be maximum {2} characters long")]
public string PropertyName { get; set; }