В чем разница в поведении [MaxLength]
и [StringLength]
атрибутах?
Насколько я могу сказать (за исключением того, что [MaxLength]
можно проверить максимальную длину массива), они идентичны и несколько избыточны?
asp.net-mvc-3
ef-code-first
entity-framework-4.1
Ник Голобородько
источник
источник
Ответы:
MaxLength используется для Entity Framework, чтобы определить размер поля строкового значения при создании базы данных.
Из MSDN:
StringLength - это аннотация данных, которая будет использоваться для проверки ввода пользователя.
Из MSDN:
источник
MaxLengthAttribute
, а EF распознаетStringLengthAttribute
[MaxLength]
есть ErrorMessage?Некоторая быстрая, но чрезвычайно полезная дополнительная информация, о которой я только что узнал из другого поста, но, похоже, не могу найти документацию (если кто-то может поделиться ссылкой на нее в MSDN, это было бы удивительно):
Сообщения проверки, связанные с этими атрибутами, фактически заменят заполнители, связанные с атрибутами. Например:
Выводит следующее, если оно превышает ограничение на количество символов: «Адрес может содержать не более 100 символов»
Заполнители, о которых я знаю, являются:
Большое спасибо bloudraak за первоначальное указание на это.
источник
Ниже приведены результаты, когда мы используем оба
[MaxLength]
и[StringLength]
атрибуты, вEF code first
. Если оба используются,[MaxLength]
выигрывает гонку. Смотрите результат теста вstudentname
столбце ниже классаисточник
Все хорошие ответы ... С точки зрения валидации я также заметил, что MaxLength проверяется только на стороне сервера, а StringLength - на стороне клиента.
источник
MaxLengthAttribute означает Макс. допустимая длина массива или строковых данных
StringLengthAttribute означает Мин. и макс. длина символов, допустимых в поле данных
Посетите http://joeylicc.wordpress.com/2013/06/20/asp-net-mvc-model-validation-using-data-annotations/
источник
Еще один момент, на который следует обратить внимание, - в атрибуте MaxLength вы можете указать только максимальный необходимый диапазон, а не минимальный требуемый диапазон. В то время как в StringLength вы можете предоставить оба .
источник
Я решил это, добавив строку ниже в моем контексте:
Почему-то
[MaxLength]
у меня не получилось.источник
При использовании атрибута для ограничения максимальной длины ввода текста из формы на веб-странице StringLength создает атрибут html maxlength (по крайней мере, в моем тесте с MVC 5). Затем выберите тот, который вы хотите предупредить пользователя, что это максимальная длина текста. С атрибутом stringlength пользователь просто не сможет печатать сверх допустимой длины. Атрибут maxlength не добавляет этот атрибут html, вместо этого он генерирует атрибуты проверки данных, что означает, что пользователь может печатать за пределами указанной длины, и что предотвращение более длинного ввода зависит от проверки в javascript, когда он перемещается в следующее поле или нажимает кнопку submit (или если JavaScript отключен, проверка на стороне сервера). В этом случае пользователь может быть уведомлен об ограничении сообщением об ошибке.
источник