代码之家  ›  专栏  ›  技术社区  ›  Brandon

有没有办法在第一次失败后停止DataAnnotation验证?

  •  3
  • Brandon  · 技术社区  · 14 年前

    在我的ViewModels中,我使用几个DataAnnotations来验证表单数据,每个字段通常有2-3个注释。

    [Required(ErrorMessage = "Please enter an email address.")]
    [Email(ErrorMessage = "That is not a valid email address.")] // Custom
    public string Email { get; set; }
    

    现在,如果有人提交表单,两个错误都会出现在验证摘要中。有没有简单的方法来指定运行验证注释的顺序,以便在所需的验证失败时,电子邮件验证不会运行?

    (我也知道我可能会将所需的注释合并到自定义电子邮件中,但这只是一个示例)。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Aaronaught    14 年前

    在这种情况下,我可能会采用与ASP.NET WebForms验证程序相同的方法—只需 EmailAttribute 验证器返回 true 如果值为 null

    想想看:

    • [Required] 验证程序和空/空电子邮件地址将生成验证错误;

    • 如果电子邮件地址是可选的,则null/空值应视为有效。

    不需要解决拦截验证器的复杂问题,因为你可以设计单独的验证器来一起玩!

        2
  •  1
  •   John Farrell    14 年前

    订货确认:否。

    在这种情况下,您可以简单地删除所需的属性,因为“”或“”将使电子邮件地址验证失败。

    是的,AFAIK创建一个结合了两者的自定义验证属性可能是最好的选择。

        3
  •  1
  •   Brandon Linton    14 年前

    here ,您可以添加这样的orderby子句来强制特定类型的属性排序到顶部:

    orderby attribute.GetType() == typeof(T) ? 0 : 1
    

    只需创建一个强类型验证运行器方法,其中 T 是从 ValidationAttribute