4

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

当 Company 和 Name 都为空时,什么都不会发生。如果它们中的任何一个被填充,则也不应该发生任何事情。如果没有填写公司或名称,请在两者处显示标签。(错误信息可能相同)

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

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 的组合,但它们都不起作用。当我什么都不填时,这两个属性上不会显示任何错误。

谁能帮我吗?

4

2 回答 2

2

从评论看来,问题在于启用客户端验证,并且规则实际上在回发时起作用。如FluentValidation wiki中所述,唯一支持的客户端规则是

  • 非空/非空
  • 匹配(正则表达式)
  • InclusiveBetween(范围)
  • 信用卡
  • 电子邮件
  • EqualTo(跨属性相等比较)
  • 长度

所以基本上你想要达到的目标是不支持开箱即用的。

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

于 2012-11-09T18:58:30.463 回答
0

您可以使用 when 条件添加两个规则:

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");
于 2012-10-31T13:37:16.717 回答