【发布时间】:2012-10-31 13:33:44
【问题描述】:
我想在我的 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 的组合,但它们都不起作用。当我什么都不填时,这两个属性上不会显示任何错误。
谁能帮帮我?
【问题讨论】:
-
所以没有人知道如何解决这个问题? :(
-
我无法重现您的问题;我已经使用您的确切规则运行了一个简单的测试,它们似乎很好(即当 Name 和 Company 都为空时会失败)。问题可能在于将 FluentValidation 与 ASP.NET MVC 集成,即您的任何其他规则是否有效?
-
这在正常情况下可以工作,但我应该让你们知道这个表单是用 ajax (jquery validate) 发布的。我注意到某些规则,例如何时、除非和必须在服务器端执行,因此如果没有总页面回发,就无法在客户端验证。 NotEmpty() 之类的某些规则在客户端确实有效,但When、Unless 和 Must 似乎需要页面回发来验证。
-
@Robin - 页面加载后表单中的输入是否附加到 DOM 中?
-
@TravisJ 是的,就是这样,服务器端验证正在 json 序列化到表单提交的网页。
标签: c# asp.net-mvc-3 validation