Чтобы создать пользовательский валидатор аннотаций данных, следуйте этим рекомендациям:
- Ваш класс должен наследовать от
System.ComponentModel.DataAnnotations.ValidationAttribute
class. - Переопределить
bool IsValid(object value)
метод и реализовать логику проверки внутриit.
Вот и все.
ВАЖНО Внимание
Иногда разработчики проверяют, что значение не равно нулю / пусто, и возвращают false.Это обычно некорректное поведение, потому что для проверки используется Required
, что означает, что ваши пользовательские валидаторы должны проверять только ненулевые данные, но возвращать true
в противном случае (см. Пример).Это сделает их пригодными для использования в обязательных (обязательных) и необязательных полях.
Пример
public class StringLengthRangeAttribute : ValidationAttribute
{
public int Minimum { get; set; }
public int Maximum { get; set; }
public StringLengthRangeAttribute()
{
this.Minimum = 0;
this.Maximum = int.MaxValue;
}
public override bool IsValid(object value)
{
string strValue = value as string;
if (!string.IsNullOrEmpty(strValue))
{
int len = strValue.Length;
return len >= this.Minimum && len <= this.Maximum;
}
return true;
}
}
Все свойства могут быть установлены в атрибуте так, как вы хотите их установить.
Некоторыепримеры:
[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]
[StringLengthRange(Maximum = 20)]
[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]
Когда определенное свойство не установлено, его значение устанавливается в конструкторе, поэтому оно всегда имеет значение.В приведенных выше примерах использования я также намеренно добавил валидатор Required
, так что он синхронизируется с приведенным выше предостережением , которое я написал.
Важно
Итак, этот валидаторвсе равно будет работать со значением вашей модели, которое не требуется, но когда оно присутствует, оно проверяется (представьте текстовое поле в веб-форме, это не обязательно, но если пользователь вводит значение в, оно должно быть действительным).