Поведение атрибута 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; }