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

nim*_*ari 4 asp.net modelstate jquery-form-validator asp.net-core razor-pages

想象一下,一个razor pageForm的是有许多输入,用户填充它们。

post当它想像这样验证发布的模型时使用方法:

public IActionResult OnPost()
{
     if (!ModelState.IsValid)
     {
        return Page(model);
     }
}
Run Code Online (Sandbox Code Playgroud)

例如,如果该模型的 3 个属性(名称为:a、b、c)无效,它会返回到 razor 视图并显示错误(因为asp-validation-for每个属性),如下所示:

public IActionResult OnPost()
{
     if (!ModelState.IsValid)
     {
        return Page(model);
     }
}
Run Code Online (Sandbox Code Playgroud)

我想为所有人显示一个特定的错误,如下所示:

The a field is required.
The b field is not a valid e-mail address.
The c field is required.
Run Code Online (Sandbox Code Playgroud)

我知道我可以分别(ErrorMessage ="")用于它们中的每一个,但大尺寸不合逻辑!有没有办法为所有无效的人显示特定的按摩ModelStates

编辑:

例如,在 View 中显示错误之前,请像这样更改它们的错误消息:

@foreach (var error in modelStateErrors)
{
    error.text = "Fill it";
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

小智 5

我创建了一个带有 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);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,如果您的 ModelState 无效,您可以在返回页面之前转换消息:

public IActionResult OnPost()
{
     if (!ModelState.IsValid)
     {
        ModelState.SetAllErrorMessages("Your message here");
        return Page(model);
     }
}
Run Code Online (Sandbox Code Playgroud)