Отдельное сообщение об ошибке для минимальной и максимальной длины строки — аннотация данных MVC4

Не мог бы кто-нибудь поделиться своей реализацией отдельных сообщений об ошибках для минимальной и максимальной длины строки с использованием аннотаций данных в MVC?

Кажется, что StringLength допускает только одно сообщение об ошибке, а MinLength/MaxLength не генерируют ненавязчивую разметку проверки, поскольку они не IClientValidatable

Хотя это кажется очень распространенным требованием, я не могу найти реализацию в Интернете.


person parliament    schedule 09.02.2013    source источник
comment
Регулярные выражения?   -  person David Spence    schedule 10.02.2013
comment
Будут ли они генерировать ненавязчивые атрибуты проверки?   -  person parliament    schedule 10.02.2013
comment
Да, javascript будет выполнять клиентскую часть регулярных выражений.   -  person David Spence    schedule 10.02.2013
comment
Круто, тогда не стесняйтесь отвечать на вопрос.   -  person parliament    schedule 10.02.2013
comment
Это должно быть сделано в атрибутах 4.5 MinLength MaxLength: msdn.microsoft.com/en-us/library/ В моем случае мне понадобился RegEx для какого-то другого сообщения об ошибке и min max отдельно, но я не могу обновить версию, поэтому мне нужно выполнить пользовательскую проверку.   -  person Jozef Krchňavý    schedule 17.02.2017


Ответы (3)


Вы можете использовать аннотацию данных RegularExpression для минимальной проверки и использовать атрибут StringLength для максимальной проверки. Javascript будет выполнять регулярные выражения на стороне клиента, поэтому они приятны и ненавязчивы! Вы можете использовать только один атрибут RegularExpression для каждого свойства, в противном случае вы можете использовать как максимум, так и минимум, используя регулярное выражение.

Минимум 5 символов

[RegularExpression(@"^.{5,}$", ErrorMessage = "Minimum 5 characters required")]

Максимум 50 символов

[StringLength(50, ErrorMessage = "Maximum {2} characters exceeded")]
person David Spence    schedule 10.02.2013
comment
Эй, я только что попробовал это, и я не могу использовать 2, он говорит о дублирующемся атрибуте! лол, мне все еще нужно решение :( - person parliament; 19.02.2013
comment
Ах. Я знал, что они работают ненавязчиво... Как насчет использования одного из них для минимума и [StringLength(50, ErrorMessage = "Maximum {2} characters exceeded")] для максимума? - person David Spence; 19.02.2013
comment
Хорошая идея :) Я использовал StringLength(int.MaxValue, ErrorMessage = Minimum) для мин. и регулярное выражение для макс. еще раз спасибо - person parliament; 21.02.2013
comment
Это не удается, когда имеется более одной строки [RegularExpression(@^[\s\S]{5,}$, ErrorMessage = требуется минимум 5 символов)] заставит его работать для нескольких строк - person socketman; 05.02.2015
comment
Лично я не думаю, что это подходящий ответ, учитывая, что вы, возможно, уже используете регулярное выражение для чего-то другого (в моем случае поле пароля с регулярным выражением для проверки определенных символов). Я думаю, что правильный подход, вероятно, состоит в том, чтобы расширить StringLength или создать свой собственный атрибут. - person Stevieboy84; 26.02.2019

Хотя это не отдельные сообщения, вот что я сделал:

[StringLength(30, ErrorMessage = "Must be between {2} and {1} characters long.", MinimumLength = 6)]
person Soenhay    schedule 28.08.2013
comment
Если вы не используете [Required] и строка пуста, то MinimumLength игнорируется. - person CooncilWorker; 28.03.2016

[StringLength(800, ErrorMessage = "<img src='/images/icon-info.png' /><p>The {0} must be between {2} and {1} characters long.</p>", MinimumLength = 6)]

Это отобразит изображение, а также минимальную и максимальную длину.

person Stuart Smith    schedule 03.02.2017