Поведение атрибута StringLength - PullRequest
14 голосов
/ 29 августа 2011

У меня есть такой атрибут, который проверяет минимальную и максимальную длину строки:

    [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 Ответ

24 голосов
/ 29 августа 2011

Вы можете использовать атрибуты 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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...