asp.net - 对所有无效属性使用单个错误消息模板

标签 asp.net asp.net-core razor-pages modelstate jquery-form-validator

想象一个 razor pageForm有许多用户填写的输入。
post当它想像这样验证发布的模型时的方法:

public IActionResult OnPost()
{
     if (!ModelState.IsValid)
     {
        return Page(model);
     }
}
例如,如果该模型的 3 个属性(名称为:a、b、c)无效,它将返回到 razor View 并显示错误(因为每个属性的 asp-validation-for),如下所示:
The a field is required.
The b field is not a valid e-mail address.
The c field is required.
我想为所有人显示一个特定的错误,如下所示:
This Input is not valid.
This Input is not valid.
This Input is not valid.
我知道我可以使用 (ErrorMessage ="")分别为他们每个人,但它的大尺寸不合逻辑!有没有办法为所有无效 ModelStates 显示特定的按摩? ?
编辑:
例如,在 View 中显示错误之前,请像这样更改它们的错误消息:
@foreach (var error in modelStateErrors)
{
    error.text = "Fill it";
}
enter image description here

最佳答案

我创建了一个带有 ModelState 扩展方法的解决方案。
它基本上从状态中删除任何错误,并将它们添加回所需的消息。
创建一个 ModelStateExtensions.cs在您的命名空间中:

public static class ModelStateExtensions
{
    public static void SetAllErrorMessages(this ModelStateDictionary modelState, string errorMessage)
    {
        foreach (var state in modelState)
        {
            if (state.Value.Errors.Count > 0)
            {
                modelState.Remove(state.Key);
                modelState.AddModelError(state.Key, errorMessage);
            }
        }
    }
}
然后,如果您的 ModelState 无效,您可以在返回页面之前转换消息:
public IActionResult OnPost()
{
     if (!ModelState.IsValid)
     {
        ModelState.SetAllErrorMessages("Your message here");
        return Page(model);
     }
}

关于asp.net - 对所有无效属性使用单个错误消息模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64314425/

相关文章:

asp.net - 如何将范围服务注入(inject)到 IClaimsTransformer 的实现中?

javascript - 如何从 JavaScript 触发 ASP.NET Core 客户端验证

javascript - ASP.NET Core SPA 中基于 JWT 的身份验证 - 前端验证

c# - identityServer4收到token后应该如何添加redis?

razor - Razor 和 Razor Pages 有什么区别

reactjs - Razor 页面和 Razor View

c# - 如何在 C# 中将文本框值从一个用户控件获取到另一个用户控件

asp.net - 多个 ASP.NET 开发服务器端口

javascript - 无法修改 Controls 集合,因为该控件包含代码块(即 <% ...%>)ajax 工具包 html 编辑器

angular - Asp.net Core spa + angular4 + firebase