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