Валидация модели в C#. Атрибуты валидации

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В прошлой части мы познакомились с основами валидации модели в C# и посмотрели как можно осуществлять проверку вводимых пользователем данных. Сегодня мы продолжим эту тему и посмотрим какие атрибуты валидации нам доступны, что называется «из коробки» для того, чтобы конкретизировать правила валидации определенных полей и свойств объекта.

ValidationAttribute

Все атрибуты валидации, которые мы будем рассматривать ниже, являются потомками класса ValidationAttribute.  У этого класса определены основные свойства, необходимые для настройки валидации и одно из главных свойств — это свойство ErrorMessage, которое содержит текст ошибки. Используя это свойство, мы можем локализовать текст ошибки, который увидит пользователь. Например, вернемся к нашему примеру с пользователем из предыдущей статьи и перепишем наш класс User следующим образом:

public class User
 {
     [Required]
     [Range(15,100, ErrorMessage ="Возраст пользователя должен быть не менее 15 и не более 100 лет")]
     public int Age { get; set; }
     [Required]
     [StringLength(50, MinimumLength = 3)]
     public string Name { get; set; }
 }

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

Имя:
Вася
Возраст:
11
Возраст пользователя должен быть не менее 15 и не более 100 лет

Основные атрибуты валидации моделей в C#

В пространстве имен System.ComponentModel.DataAnnotations содержится большое количество атрибутов валидации, покрывающих, в принципе, большинство наших потребностей. Рассмотрим основные из них.

Атрибут Required

Этот атрибут означает, что поле  (или свойство) модели должно быть обязательно заполнено. При этом, ошибка валидации возникает в в следующих случаях:

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

Если для поля допускается ввод пустой строки, то можно определить атрибут Required со следующим свойством:

public class User
{
    <--Прочие свойства-->
    [Required(AllowEmptyStrings = true)]
    public string Comment { get; set; } = null;
}
Если допускается, что поле или свойство может содержать пустую строку или строку, состоящую из пробелов, то при значении null всё равно будет возникать ошибка валидации

Атрибут StringLength

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

public class User
{
    <--Прочие свойства класса-->

    [StringLength(50, MinimumLength = 3)]
    public string Name { get; set; }
}

Здесь в первом параметре мы задали максимальную длину строки, а во втором — минимальную.

Атрибут Range

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

public class User
{
    [Range(15,100, ErrorMessage ="Возраст пользователя должен быть не менее 15 и не более 100 лет")]
    public int Age { get; set; }
    <--Прочие свойства класса-->
}

При этом, атрибут Range может применяться и к полям с типом данных DateTime:

[Range(typeof(DateTime),"01/01/2006", "01/01/2121", ErrorMessage ="Введено некорректное значение даты")]
public DateTime Birthday { get; set; }

Атрибут RegularExpression

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

[RegularExpression(@"^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$")]
public string Email { get; set; }

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

Для проверки адреса электронной почты не обязательно использовать регулярное выражение. В C# для этого также имеется специальный атрибут — EmailAddress

Атрибут Compare

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

public class User
{
    <--Прочие свойства класса-->
    public string Password { get; set; }
    [Compare("Password")]
    public string ConfirmPassword { get; set; }
}

В параметре атрибута мы передаем имя свойства с которым мы будем сравнивать значение текущего свойства. В данном случае, значение свойства ConfirmPassword  сравнивалось со значением свойства Password.

Атрибут Phone

Атрибут Phone указывает на то, что поле содержит номер телефона в правильном формате. По сути, атрибуты Phone и EmailAddress — это встроенные атрибуты RegularExpression.

Атрибут CreditCard

Атрибут CreditCard указывает на то, что значение поля данных — это номер кредитной карты. Этот атрибут не проверяет доступность карты для покупок, а только проверяет соответствие строки заданному формату.

Атрибут Url

Атрибут Url проверяет является ли введенное значение url-адресом. Как и в случае с атрибутом CreditCard, проверка на доступность введенного адреса не производится.

Итого

Наличие различных атрибутов валидации модели в C# обеспечивает большинство наших потребностей при проверке введенных пользователем данных на корректность. Сегодня мы рассмотрели имеющиеся в пространстве имен System.ComponentModel.DataAnnotations атрибуты валидации. При этом, возможности .NET C# позволяют, при необходимости, создавать собственные атрибуты валидации и использовать их при проверке наших моделей. Об этом мы поговорим в следующей статье.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии