Содержание
Атрибуты валидации модели позволяют подключать к проверке тех или иных свойств дополнительную логику. Например, мы можем проверять строковые значения на соответствие регулярному выражению или проверять вхождение числа в заданный диапазон значений и т.д.
Атрибут Required
Этот атрибут означает, что свойство, к которому он применен обязательно должно иметь какое-либо значение. Например,
public class Person { [Required] public string Name { get; set; } public int Age { get; set; } }
При этом, ошибка валидации возникает в следующих случаях:
- если свойство имеет значение
null
- содержит пустую строку (
""
) - содержит только символы пробела.
Воспользуемся приложением, которое мы рассматривали в предыдущей части и посмотрим на действие этого атрибута. Как мы уже знаем, если поле Name
будет содержать даже один пробел, то привязчик модели пропустит такое поле, как имеющее значение, атрибут Required
позволит исключить такое поведение и мы получим ошибку валидации модели:
Пробуем отправить форму на сервер:
Как видно по рисунку, наличие всего лишь пробела в значении свойства не позволило пройти валидацию свойству с атрибутом
Required
. Атрибут Required может также содержать следующие параметры:
AllowEmptyStrings
— допустимо ли содержание в значении свойства пустых строк
ErrorMessage
— текст ошибки, который должен быть показан пользователюErrorMessageResourceName
— имя источника ошибки (свойства)ErrorMessageResourceType
— тип источника ошибки (свойства)
Применим некоторые параметры атрибута:
public class Person { [Required(ErrorMessage = "Поле \"Имя\" должно быть заполнено",AllowEmptyStrings = true)] [DisplayFormat(ConvertEmptyStringToNull = false)] public string Name { get; set; } public int Age { get; set; } }
Теперь мы допустили наличие в свойстве Name
пустых строк, а также добавили свой текст ошибки. Проверим
В данном случае, при допустимости пустых строк в свойстве и запрете конвертации пустой строки в null мы никогда не сможем «поймать» ошибку валидации модели. Чтобы увидеть действие параметра
ErrorMessage
отключим допустимость пустых строк в свойстве:
[Required(ErrorMessage = "Поле \"Имя\" должно быть заполнено",AllowEmptyStrings = false)] public string Name { get; set; }
Теперь мы сможем увидеть наш текст ошибки:
Атрибут String Length
Атрибут используется для указания минимальной и максимальной длину строки, разрешенной в поле данных. Например, запретим ввод имени менее трех символов:
public class Person { [Required(ErrorMessage = "Поле \"Имя\" должно быть заполнено",AllowEmptyStrings = false)] [StringLength(50, MinimumLength =3, ErrorMessage ="Длина имени должна быть не менее трех символов")] public string Name { get; set; } public int Age { get; set; } }
Первый параметр в атрибуте — 50
указывает максимальную длину строки и является обязательным. Далее мы указали минимальную длину строки и текст ошибки. Теперь, если свойство Name
будет содержать менее трех символов, то мы увидим следующий текст ошибки:
Атрибут Range
Атрибут Range
задает ограничения числового диапазона для значения поля данных. Например, возраст человека вряд ли может превышать 100 лет, поэтому мы можем применить этот атрибут, например, следующим образом:
public class Person { [Required(ErrorMessage = "Поле \"Имя\" должно быть заполнено", AllowEmptyStrings = false)] [StringLength(50, MinimumLength = 3, ErrorMessage = "Длина имени должна быть не менее трех символов")] public string Name { get; set; } [Range(18,100,ErrorMessage ="Возвраст пользователя должен быть не менее 18 и не более 100 лет")] public int Age { get; set; }
В атрибуте Range
мы применили следующие параметры:
- первый — минимальное значение диапазона
- второй — максимальное значение диапазона
- третий — текст ошибки
Проверим работу приложения:
Атрибут Regular Expression
Атрибут Regular
указывает на то, что значение должно соответствовать определенному в параметрах атрибута регулярному выражению. Этот атрибут удобно использовать, например, для проверки адреса электронной почты или телефона пользователя и т.д. Например, добавим в класс Person
новое поле и применим к нему этот атрибут:
public class Person { ... [RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Некорректный адрес электронной почты")] public string Email { get; set; } }
Атрибут Compare
Атрибут Compare
позволяет сравнивать два свойства объекта. Например, этот атрибут удобно использовать для сравнения паролей, которые вводит пользователь. Добавим два свойства в класс Person
:
public class Person { .... public string Password { get; set; } [Compare("Password")] public string ConfirmPassword { get; set; } }
Теперь доработаем немного веб-форму в представлении Views/Home/Index.cshtml:
@using (Html.BeginForm(FormMethod.Post)) { @Html.LabelFor(n=>n.Name, "Имя:") <br /> @Html.TextBoxFor(n=>n.Name); <br/> @Html.LabelFor(n=>n.Age, "Возраст:") <br /> @Html.TextBoxFor(n=>n.Age, new{type = "number"}) <br /> @Html.LabelFor(n=>n.Email, "Email:") <br /> @Html.TextBoxFor(n=>n.Email) <br /> @Html.LabelFor(n=>n.Password, "Пароль:") <br /> @Html.TextBoxFor(n=>n.Password) <br /> @Html.LabelFor(n=>n.ConfirmPassword, "Подтверждение пароля:") <br /> @Html.TextBoxFor(n=>n.ConfirmPassword) <br /> @Html.TextBox("btn", "Отправить", new{type = "submit"}) <br /> }
Проверим действие атрибута Compare
:
Дополнительные атрибуты валидации модели
Достаточно часто, при регистрации нового пользователя в веб-приложениях требуется указывать адрес электронной почты, телефон, дополнительную информацию, например, ссылки на профили в соц.сетях и т.д. В связи с этим, в ASP.NET Core MVC были добавлены следующие дополнительные атрибуты валидации модели:
EmailAddress
Phone
CreditCard
Url
Итого
Для валидации модели в ASP.NET Core MVC удобно использовать различные атрибуты валидации, позволяющие добавить дополнительную логику проверки свойств модели. В ASP.NET Core предусмотрено достаточно большое количество атрибутов валидации, позволяющих покрыть максимум потребностей разработчиков.