Содержание
В прошлой части мы познакомились с основами валидации модели в 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; }
Атрибут String Length
Атрибут используется для указания минимальной и максимальной длину строки, разрешенной в поле данных. Этот атрибут мы использовали в предыдущей части:
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; }
Атрибут Regular Expression
Атрибут Regular
указывает на то, что значение должно соответствовать определенному в параметрах атрибута регулярному выражению. Этот атрибут удобно использовать, например, для проверки адреса электронной почты или телефона пользователя:
[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
.
EmailAddress
Атрибут Compare
Атрибут Compare
позволяет сравнивать два свойства объекта. Например, этот атрибут удобно использовать для сравнения паролей, которые вводит пользователь:
public class User { <--Прочие свойства класса--> public string Password { get; set; } [Compare("Password")] public string ConfirmPassword { get; set; } }
В параметре атрибута мы передаем имя свойства с которым мы будем сравнивать значение текущего свойства. В данном случае, значение свойства ConfirmPassword
сравнивалось со значением свойства Password
.
Атрибут Phone
Атрибут Phone указывает на то, что поле содержит номер телефона в правильном формате. По сути, атрибуты Phone
и EmailAddress
— это встроенные атрибуты Regular
.
Атрибут CreditCard
Атрибут CreditCard
указывает на то, что значение поля данных — это номер кредитной карты. Этот атрибут не проверяет доступность карты для покупок, а только проверяет соответствие строки заданному формату.
Атрибут Url
Атрибут Url
проверяет является ли введенное значение url-адресом. Как и в случае с атрибутом CreditCard
, проверка на доступность введенного адреса не производится.
Итого
Наличие различных атрибутов валидации модели в C# обеспечивает большинство наших потребностей при проверке введенных пользователем данных на корректность. Сегодня мы рассмотрели имеющиеся в пространстве имен System.ComponentModel.DataAnnotations
атрибуты валидации. При этом, возможности .NET C# позволяют, при необходимости, создавать собственные атрибуты валидации и использовать их при проверке наших моделей. Об этом мы поговорим в следующей статье.