Почему IValidatableObject.Validate вызывается только если проверка свойства проходит - PullRequest
12 голосов
/ 22 января 2011

В моей модели кажется, что 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 Ответ

18 голосов
/ 22 января 2011

Это по замыслу. Проверка на уровне объекта не запускается, пока все свойства не пройдут проверку, поскольку в противном случае возможно, что объект является неполным. Метод Validate предназначен для таких вещей, как сравнение одного свойства с другим. В вашем случае вы должны написать собственный валидатор свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...