我已经在我的asp.net mvc 3项目中设置了fluentvalidation。我有一个有两个输入的表单。两者都可以为空,但不能同时为空。
以下是我所拥有的:
RuleFor(x => x.username)
.NotEmpty()
.When(x => string.IsNullOrEmpty(x.email) == true)
.WithMessage("Please enter either a username or email address")
这正确地将错误直接放在“我的用户名”字段的上方。但是,当两个字段都为空时,我希望验证摘要显示消息
有办法吗?我一直在想,我可以在模型中创建一个未使用的字段,并在上面加上错误(如果其他两个字段为空)。
RuleFor(x => x.unused_field)
.NotEmpty()
.When(x => string.IsNullOrEmpty(x.email) == true && string.IsNullOrEmpty(x.username) == true)
.WithMessage("Please enter either a username or email address")
但这样做感觉很尴尬。有没有一种方法可以将消息添加到验证摘要中?
最佳答案
我唯一能找到的参考资料是this。
如果你的模型很简单,只有这个规则,那么这个规则就足够了:
RuleFor(x => x)
.Must(x => !string.IsNullOrWhiteSpace(x.Email) || !string.IsNullOrWhiteSpace(x.UserName))
.WithName(".") // This adds error message to MVC validation summary
.WithMessage("Please enter either a username or email address");
只需将
@Html.ValidationSummary()
添加到您的视图中,您就可以开始了。但如果你想对你的模型制定更多的规则,那么据我所知,我只能想到一种“老套”的方法:
在控制器操作中添加以下内容:
if (!ModelState.IsValid)
{
if (ModelState["."].Errors.Any())
{
ModelState.AddModelError(string.Empty, ModelState["."].Errors.First().ErrorMessage);
}
// ...
}
这将把
"."
属性的第一条错误消息添加到model属性(使其适应您的需要)。此外,您还必须执行@Html.ValidationSummary(true)
以在验证摘要中仅显示模型级错误。第三个选项:将规则添加到
unused_property
并使用@Html.ValidationSummaryFor(x => x.unused_property)
作为验证摘要