Validator.TryValidateObject未验证RangeAttribute

Jam*_*hes 41 asp.net-mvc data-annotations

鉴于以下对象,

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

    [Range(1, 5)]
    public int Difficulty { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

使用以下验证码

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
Run Code Online (Sandbox Code Playgroud)

为什么Range属性在Required(值显然为0)时不会创建验证错误?

Jam*_*hes 69

啊所以看起来我需要指定validateAllProperties = true

Validator.TryValidateObject(question, ctx, results, true);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,让我失望的是我有一个抽象基类,其中包含另一个属性而没有validateAllProperties,Validator也会停止在所有超类的第一个错误上.所以你会得到每个超类的验证错误(在我的情况下是2)

  • 善良。我不敢相信 `true` 不是默认设置。真是头疼。谢谢 (2认同)

Sma*_*kid 21

Validator.TryValidatorObject(instance, validationContext, validationResults)呼吁Validator.TryValidateObject(instance, validationContext, validationResults, validateAllProperties)validateAllProperties = false.

当validateAllProperties是false,只有RequiredAttribute将被验证.

  • 我的天哪,这真是一团糟.希望微软明白有一种叫做"用户友好"这个词. (6认同)