Почему IValidatableObject.Validate только вызывается, если проверка свойств проходит?
В моей модели кажется, что Validate()
вызывается только после того, как оба свойства проходят проверку.
public class MyModel : IValidatableObject
{
[Required]
public string Name { get; set;}
[Required]
public string Nicknames {get; set;}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(Nicknames != null && Nicknames.Split(Environment.NewLine.ToCharArray()).Count() < 2)
return yield result new ValidationResult("Enter at least two nicknames, new [] { "Nicknames" });
}
}
Когда пользователь вводит одну строку текста в текстовую область Nicknames
, но оставляет текстовое поле Name
пустым, отображается только сообщение об ошибке Required
для свойства Name
. Сообщение об ошибке, которое должно отображаться из функции Validate()
, никогда не появляется.
Только после ввода имени в текстовое поле Name
, а текст в тексте Nicknames
- это функция Validate()
.
Так ли это должно работать? Кажется странным, что пользователю отображается сообщение об ошибке на следующей странице, когда ошибка возникает на текущей странице.
Ответы
Ответ 1
Это по дизайну. Проверка уровня объекта не срабатывает, пока все свойства не пройдут проверку, поскольку в противном случае возможно, что объект является неполным. Метод Validate предназначен для сравнения, сравнивая одно свойство с другим. В вашем случае вы должны написать специальный валидатор свойств.