Fluent验证自定义验证

时间:2012-10-31 13:33:44

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

我想在我的MVC项目中使用Fluent验证(http://fluentvalidation.codeplex.com)制定2条规则。

当公司和名称都为空时,不会发生任何事情。 如果其中任何一个被填满,也不会发生任何事情。 如果未填写公司或名称,则在两者上都显示标签。 (错误信息可能相同)

到目前为止,我已经尝试过了:

RuleFor(x => x.Name)
.NotEmpty()
.WithMessage("Please fill in the company name or the customer name")
.Unless(x => !string.IsNullOrWhiteSpace(x.Company));

RuleFor(x => x.Company)
.NotEmpty()
.WithMessage("Please fill in the company name or the customer name")
.Unless(x => !string.IsNullOrWhiteSpace(x.Name));

我尝试过When,Must和unless的组合,但它们都不起作用。当我什么都没有填写时,这2个属性都没有显示错误。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:2)

从评论看来,问题似乎是启用客户端验证,规则实际上是在回发后工作。正如FluentValidation wiki中所指定的,唯一受支持的客户端规则是

  • NOTNULL / NotEmpty
  • 匹配(正则表达式)
  • InclusiveBetween(range)
  • 信用卡式
  • 电子邮件
  • EqualTo(跨财产平等比较)
  • 长度

基本上不支持你想要实现的目标。

请查看自定义客户端FluentValidation规则here的示例。

答案 1 :(得分:0)

您可以在条件时添加两条规则:

RuleFor(x => x.Name)
.NotEmpty()
.When(x => string.IsNullOrEmpty(x.Company))
.WithMessage("Please fill in the company name or the customer name");

RuleFor(x => x.Company)
.NotEmpty()
.When(x => string.IsNullOrEmpty(x.Name))
.WithMessage("Please fill in the company name or the customer name");