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

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

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

Рассмотрим атрибуты, которые используются для валидации модели в приложении на ASP.NET MVC.

Атрибут Required

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

Чтобы при валидации мы не получали несуразных сообщений об ошибке, этот атрибут позволяет настроить текст сообщения:

public class Book
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Поле должно быть установлено")]
    [Display(Name = "Название")]
    public string Name { get; set; }

    [Required]
    [Display(Name = "Автор")]
    public string Author { get; set; }

    [Required]
    [Display(Name = "Год")]
    public int Year { get; set; }
}
Настройка сообщений об ошибке в ASP.NET MVC 5

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

Атрибут 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 mvc 5

Атрибут StringLength

Чтобы пользователь не мог ввести очень длинный текст, используется атрибут StringLength. Особенно это актуально, если в базе данных установлено ограничение на размер хранящихся строк.

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

public class Book
{
    [HiddenInput(DisplayValue = false)]
    public int Id { get; set; }

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

    [Required]
    [Display(Name = "Автор")]
    public string Author { get; set; }

    [Required]
    [Display(Name = "Год")]
    public int Year { get; set; }
}

Атрибут Range

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

[Display(Name = "Год")]
[Range(1700,2000,ErrorMessage="Недопустимый год")]
public int Year { get; set; }

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

[Range(typeof(decimal), "0.00", "49.99")]
public decimal Price { get; set; }

Атрибут Compare

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

[DataType(DataType.Password)]
public string Password { get; set; }

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

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

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

Атрибут Remote

Атрибут Remote в отличие от других классов атрибутов находится в пространстве имен System.Web.Mvc. Он позволяет выполнять валидацию на стороне клиента с обратными вызовами на сервер.

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

public class Book
{
    [Required]
    [Remote("CheckName", "Home", ErrorMessage = "Name is not valid.")]
    public string Name { get; set; }
}

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

[HttpGet]
public JsonResult CheckName(string name)
{
    var result = !(name=="Название");
    return Json(result, JsonRequestBehavior.AllowGet);
}

Это действие контроллера принимает в качестве параметра имя свойства, подлежащего валидации, и возвращает true или false в форме объекта в формате JSON. При этом если возвращается false, то мы увидим сообщение об ошибке, заданное парааметром ErrorMessage.

Атрибут Remote в ASP.NET MVC5
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850