如何指定DataAnnotation ValidationAttribute的顺序?

时间:2010-12-27 14:58:25

标签: asp.net-mvc .net-4.0 data-annotations

问题here类似,但我没有任何域对象继承。我的字段和验证标记按以下顺序排列,但MustBe18错误和必需错误是唯一打印的错误。我在这个模型中有几个其他字段有更多验证,但代码中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方法)

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 个答案:

答案 0 :(得分:3)

指定订单的唯一方法是创建自己的ModelValidatorProvider,然后可以对属性进行排序。这可能会很棘手,因为您还需要为每个带有Order参数的属性创建重载(不知道它们是否已经执行)。

如果您只关注验证摘要的显示顺序,那么您需要做的就是遍历ModelState条目并从那里吐出错误。