我该如何指定DataAnnotation ValidationAttribute的顺序?

4
这里有一个类似的问题:https://dev59.com/7VHTa4cB1Zd3GeqPORPd,但是我没有任何域对象继承。我的字段和验证标签按以下顺序排列,但只打印了MustBe18错误和Required错误。在这个模型中有几个其他字段需要更多的验证,但代码中ValidationAttribute的顺序似乎并不重要。链接帖子中jfar的答案似乎暗示可以构建一个辅助工具,但怎么做呢?如何控制顺序?
[Required(ErrorMessage = "This field is required")]
[DisplayName("Date of Birth")]
[MustBeValidDate(ErrorMessage = "Must be a valid date")]
[MustBe18(ErrorMessage = "You must be 18 years old")]
[MustNotBeOver100(ErrorMessage = "This caller is too old")]
public string dob { get; set; }

MustBe18:ValidationAttribute(重载的IsValid方法)

必须满18岁:验证属性(重载的IsValid方法)

try
{
    DateTime dob = new DateTime(DateTime.Now.AddYears(-18).Year, DateTime.Now.Month, DateTime.Now.Day);
    return DateTime.Compare(DateTime.Parse(value.ToString()), dob) <= 0;
}
catch
{
    return false;
}
1个回答

3
唯一指定顺序的方法是创建自己的ModelValidatorProvider,然后对属性进行排序。这可能会很棘手,因为您还需要为每个属性创建带有Order参数的重载(不知道它们是否已经这样做)。
如果你在意的只是验证摘要出现的顺序,那么你只需要循环遍历ModelState条目并从中输出错误即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接