Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Validator.TryValidateObject未验证RangeAttribute_Asp.net Mvc_Data Annotations - Fatal编程技术网

Asp.net mvc Validator.TryValidateObject未验证RangeAttribute

Asp.net mvc Validator.TryValidateObject未验证RangeAttribute,asp.net-mvc,data-annotations,Asp.net Mvc,Data Annotations,鉴于以下目标 public class Question { [Required] public string QuestionText { get; set; } [Range(1, 5)] public int Difficulty { get; set; } } 使用以下验证代码 ICollection<ValidationResult> results = new List<ValidationResult>()

鉴于以下目标

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
ICollection results=newlist();
问题=新问题();
ValidationContext ctx=新的ValidationContext(问题,空,空);
TryValidateObject(问题、ctx、结果);
//结果:长度=1

为什么范围属性在需要时不创建验证错误(值显然为0)?

Ah因此我似乎需要指定validateAllProperties=true

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

顺便说一句,让我感到不快的是,我有一个抽象基类,其中包含另一个属性,如果没有ValidateAllProperty,验证器也会在所有超类的第一个错误时停止。因此,对于每个超类(在我的案例2中),您将得到一个验证错误。

Validator.TryValidatorObject(实例,validationContext,validationResults)
调用
Validator.TryValidateObject(实例,validationContext,validationResults,validateAllProperties)
with
validateAllProperties=false


当validateAllProperties为
false
时,只有
RequiredAttribute
将被验证。

最初的帖子已经快3年了,我希望在行为上会有一些偏差。结果发现我的问题略有不同-6年后仍然适用-行为没有那么大的偏差,我仍然感到惊讶的是,默认值是
false
。我不敢相信
true
不是默认值。真头痛。谢天谢地,这真是一团糟。希望微软能理解“用户友好”这个词。这一点都不直观(