Подтвердить что ты не робот

Validator.TryValidateObject Не проверяет RangeAttribute

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

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 явно)?

4b9b3361

Ответ 1

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

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

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

Ответ 2

Validator.TryValidatorObject(instance, validationContext, validationResults) вызывает Validator.TryValidateObject(instance, validationContext, validationResults, validateAllProperties) с validateAllProperties = false.

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