Атрибуты валидации

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7

Последнее обновление: 08.12.2019

С помощью атрибутов валидации модели мы можем управлять валидацией и заключать несложную логику проверки значений свойств уже в атрибуты этих свойств, не прибегая к коду. Рассмотрим атрибуты валидации, которые мы можем применить в приложении на ASP.NET Core.

Атрибут Required

Применение этого атрибута к свойству модели означает, что данное свойство должно быть обязательно установлено.

using System.ComponentModel.DataAnnotations;

namespace ValidationApp.Models
{
    public class Person
    {
        [Required (ErrorMessage = "Не указано имя")]
        public string Name { get; set; }
        [Required (ErrorMessage = "Не указан электронный адрес")]
        public string Email { get; set; }
        [Required]
        public string Password { get; set; }
        public int Age { get; set; }
    }
}

С помощью свойства ErrorMessage этого атрибута можно настроить выводимое при валидации сообщение. А если мы явным образом не установим текст сообщения, то при выводе ошибки будет отображаться стандартный текст сообщения.

Атрибут Required в ASP.NET

Как можно заметить, у свойства int Age не используется атрибут Required, тем не менее если мы не укажем для него значение, оно не пройдет валидацию. Потому что для свойств тех типов данных, которые не могут принимать значение null, нам в любом случае надо предоставить значение, как в случае со свойством Age. Поэтому для него использовать атрибут Required необязательно.

Атрибут RegularExpression

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

Наиболее распространенный пример - это проверка адреса электронной почты на корректность. Например, класс модели содержит свойство Email:

[RegularExpression(@"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}", ErrorMessage = "Некорректный адрес")]
public string Email { get; set; }

Если введенное значение не будет соответствовать регулярному выражению, то будет отображено сообщение об ошибке:

Атрибут RegularExpression в ASP.NET Core

Атрибут StringLength

Чтобы пользователь не мог ввести очень длинный текст, применяется атрибут StringLength. Первым параметром в конструкторе атрибута идет максимальная допустимая длина строки. Именованные параметры, в частности MinimumLength и ErrorMessage, позволяют задать дополнительные опции отображения.

public class Person
{
    [Required (ErrorMessage = "Не указано имя")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Длина строки должна быть от 3 до 50 символов")]
    public string Name { get; set; }

    [Required (ErrorMessage = "Не указан электронный адрес")]
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }

    public int Age { get; set; }
}
Атрибут StringLength в ASP.NET Core

Атрибут Range

Атрибут Range определяет минимальные и максимальные ограничения для числовых данных.

[Range(1, 110, ErrorMessage = "Недопустимый возраст")]
public int Age { get; set; }

Атрибут Compare

Атрибут Compare гарантирует, что два свойства объекта модели имеют одно и то же значение. Если, например, надо, чтобы пользователь ввел пароль дважды:

[Required]
public string Password { get; set; }

[Compare("Password", ErrorMessage = "Пароли не совпадают")]
public string PasswordConfirm { get; set; }

Если пользователь введет второй раз другой пароль, отличный от первого, то он увидит ошибку:

Проверка ввода пароля в ASP.NET Core

Специальные атрибуты

Выше мы применяли регулярное выражение для проверки адреса электронной почты. Проверки на корректность электронной почты, адреса url, номера телефона и кредитной карты довольно часто встречаются, что для них определены специальные атрибуты:

  • [CreditCard]

  • [EmailAddress]

  • [Phone]

  • [Url]

Например:

[EmailAddress (ErrorMessage = "Некорректный адрес")]
public string Email { get; set; }

Атрибут Remote

Атрибут Remote из пространства имен Microsoft.AspNetCore.Mvc; для валидации свойства выполняет запрос на сервер к определенному методу контроллера. И если требуемый метод контроллера вернет значение false, то валидация не пройдена. Например:

[Remote(action: "CheckEmail", controller: "Home", ErrorMessage ="Email уже используется")]
public string Email { get; set; }

В данном случае указано, что для проверки значения атрибут будет обращаться к методу CheckEmail контроллера Home. Теперь определим этот метод:

public class HomeController : Controller
{
    [AcceptVerbs("Get", "Post")]
    public IActionResult CheckEmail(string email)
    {
        if (email == "admin@mail.ru" || email == "aaa@gmail.com")
            return Json(false);
        return Json(true);
    }
	// остальное содержимое контроллера
}

В данном случае метод должен возвращать объект JsonResult. Если переданное через параметр значение будет равно или "admin@mail.ru", или "aaa@gmail.com", значит, валидация не пройдена, поэтому отправляем в ответ false. Иначе отправляем true.

Удаленная валидация Remote Validation в ASP.NET Core
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850