【问题标题】:How can I specify the order of DataAnnotation ValidationAttribute's?如何指定 DataAnnotation ValidationAttribute 的顺序?
【发布时间】:2010-12-27 14:58:25
【问题描述】:

问题here 类似,但我没有任何域对象继承。我的字段和验证标签按以下顺序排列,但 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 方法)

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;
}

【问题讨论】:

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


    【解决方案1】:

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

    如果您只关心验证摘要出现的顺序,那么您只需遍历 ModelState 条目并从那里找出错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 2011-08-08
      • 1970-01-01
      • 2011-02-07
      • 2020-06-22
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多