使用Fluent验证进行条件验证

时间:2011-11-10 18:22:13

标签: c# .net asp.net-mvc validation fluentvalidation

我需要的是一种根据是否填写了其他字段来有条件地验证字段的方法。

实施例。我有一个相关的下拉列表和日期字段。如果没有设置任何字段,则表单应通过验证。但是,如果设置了两个字段中的一个但另一个没有,那么应该触发验证,需要设置另一个字段。

我编写了自定义验证类,但似乎它在单个字段上有效。有没有办法使用内置验证器设置我需要的验证?如果没有,是否有一种使用自定义验证器连接两个字段的好方法?

1 个答案:

答案 0 :(得分:89)

Fluent验证支持条件验证,只需使用When子句检查辅助字段的值:

http://fluentvalidation.codeplex.com/wikipage?title=Customising&referringTitle=Documentation&ANCHOR#WhenUnless

  

使用When / unless指定条件可以使用When和unless方法指定控制规则的条件   应该执行。例如,CustomerDiscount上的此规则   属性仅在IsPreferredCustomer为true时执行:

     

RuleFor(customer =>   customer.CustomerDiscount).GreaterThan(0).When(customer =>   customer.IsPreferredCustomer);`

     

“除非”方法与“时”相反。

您也可以使用.SetValidator操作来定义在NotEmpty条件下运行的自定义验证器。

  

RuleFor(customer =>   customer.CustomerDiscount).GreaterThan(0)。SetValidator(New MyCustomerDiscountValidator)