Модели в ASP.NET Core MVC. Атрибуты валидации

Атрибуты валидации модели позволяют подключать к проверке тех или иных свойств дополнительную логику. Например, мы можем проверять строковые значения на соответствие регулярному выражению или проверять вхождение числа в заданный диапазон значений и т.д.

Атрибут Required

Этот атрибут означает, что свойство, к которому он применен обязательно должно иметь какое-либо значение. Например,

public class Person
{
    [Required]
    public string Name { get; set; }
    public int Age { get; set; }
}

При этом, ошибка валидации возникает в следующих случаях:

  • если свойство имеет значение null
  • содержит пустую строку ("")
  • содержит только символы пробела.

Воспользуемся приложением, которое мы рассматривали в предыдущей части и посмотрим на действие этого атрибута. Как мы уже знаем, если поле Name будет содержать даже один пробел, то привязчик модели пропустит такое поле, как имеющее значение, атрибут Required позволит исключить такое поведение и мы получим ошибку валидации модели:

Пробуем отправить форму на сервер:

Как видно по рисунку, наличие всего лишь пробела в значении свойства не позволило пройти валидацию свойству с атрибутом Required. Атрибут Required может также содержать следующие параметры:

  • AllowEmptyStrings — допустимо ли содержание в значении свойства пустых строк
Чтобы привязчик модели не присваивал null свойству,если оно содержит пустую строку, также необходимо применить к свойству атрибут [DisplayFormat(ConvertEmptyStringToNull = false)]
  • 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; }

Теперь мы сможем увидеть наш текст ошибки:

Атрибут StringLength

Атрибут используется для указания минимальной и максимальной длину строки, разрешенной в поле данных. Например, запретим ввод имени менее трех символов:

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 мы применили следующие параметры:

  • первый — минимальное значение диапазона
  • второй — максимальное значение диапазона
  • третий — текст ошибки

Проверим работу приложения:

 

Атрибут RegularExpression

Атрибут RegularExpression указывает на то, что значение должно соответствовать определенному в параметрах атрибута регулярному выражению. Этот атрибут удобно использовать, например, для проверки адреса электронной почты или телефона пользователя и т.д. Например, добавим в класс 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 предусмотрено достаточно большое количество атрибутов валидации, позволяющих покрыть максимум потребностей разработчиков.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии