gpt4 book ai didi

c# - 如何使用 FluentValidation 强制显示验证摘要?

转载 作者:太空狗 更新时间:2023-10-30 00:32:07 25 4
gpt4 key购买 nike

我已经在我的 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() 添加到您的 View 中即可。

但是,如果您要在模型上添加更多规则,那么据我所知,我只能想到一种“hacky”方式:
在您的 Controller 操作中添加:

if (!ModelState.IsValid)
{
if (ModelState["."].Errors.Any())
{
ModelState.AddModelError(string.Empty, ModelState["."].Errors.First().ErrorMessage);
}
// ...
}

这会将来自 "." 属性的第一条错误消息添加到模型属性(根据您的需要进行调整)。此外,您还必须执行 @Html.ValidationSummary(true) 以在验证摘要中仅显示模型级别的错误。

第三个选项:将规则添加到 unused_property 并使用 @Html.ValidationSummaryFor(x => x.unused_property) 作为验证摘要

关于c# - 如何使用 FluentValidation 强制显示验证摘要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19928346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com