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