Validator.TryValidateObject не проверяет RangeAttribute - PullRequest
40 голосов
/ 20 марта 2011

Учитывая следующий объект,

public class Question
{
    [Required]
    public string QuestionText { get; set; }

    [Range(1, 5)]
    public int Difficulty { get; set; }        
}

Со следующим кодом проверки

ICollection<ValidationResult> results = new List<ValidationResult>();
Question question = new Question();
ValidationContext ctx = new ValidationContext(question, null, null);
Validator.TryValidateObject(question, ctx, results);
// results.Length = 1

Почему атрибут Range не создает ошибку проверки, когда Required делает (очевидно, значение 0)

Ответы [ 2 ]

67 голосов
/ 20 марта 2011

Ах, кажется, мне нужно указать validateAllProperties = true

Validator.TryValidateObject(question, ctx, results, true);

Кстати, меня оттолкнул тот факт, что у меня был абстрактный базовый класс с другим свойством, и без validateAllProperties Validatorостановитесь на первой ошибке ВСЕХ суперклассов тоже.Таким образом, вы получите ошибку проверки для каждого суперкласса (в моем случае 2)

21 голосов
/ 23 ноября 2011

Validator.TryValidatorObject(instance, validationContext, validationResults) звонки Validator.TryValidateObject(instance, validationContext, validationResults, validateAllProperties) с validateAllProperties = false.

Когда validateAllProperties равен false, будет проверяться только RequiredAttribute.

...