C# 有没有办法在相应的表格中显示错误?

C# 有没有办法在相应的表格中显示错误?,c#,asp.net-core,error-handling,razor-pages,modelstate,C#,Asp.net Core,Error Handling,Razor Pages,Modelstate,我有一个ASP.NET Core 3.1 Razor Pages应用程序。 当一个页面上只有一个表单时,这是非常简单的,但是当表单很少时,如何正确地显示错误呢 例如: /ManageUser.cshtml 更改密码 更改电子邮件 并且,如果在后端发现任何错误: OnPostChangeEmailAsync([FromService]UserManager UserManager)上的公共异步任务 { //…为了简洁起见跳过 AddModelError(“,“未找到或删除用户”); 返回页()

我有一个ASP.NET Core 3.1 Razor Pages应用程序。 当一个页面上只有一个表单时,这是非常简单的,但是当表单很少时,如何正确地显示错误呢

例如: /ManageUser.cshtml


更改密码
更改电子邮件
并且,如果在后端发现任何错误:

OnPostChangeEmailAsync([FromService]UserManager UserManager)上的公共异步任务
{
//…为了简洁起见跳过
AddModelError(“,“未找到或删除用户”);
返回页();
}
然后,这两种形式都会显示此错误。有没有办法只显示相应的表格


PS:请不要建议将错误字段绑定:事实并非如此,示例中的字段只是为了简单起见。

以字段验证为例,您可以尝试以下代码

视图:


@Html.ValidationMessage(“密码错误”)
更改密码
@Html.ValidationMessage(“EmailError”)
更改电子邮件
后端端(您可以删除属性):

公共异步任务OnPostChangeEmailAsync(UserModel UserModel)
{
如果(!ModelState.IsValid)
{
ModelState.Remove(“UserModel.OldPassword”);
ModelState.Remove(“UserModel.NewPassword1”);
ModelState.Remove(“UserModel.NewPassword2”);
AddModelError(“EmailError”,“未找到或删除用户”);
}
返回页();
}
公共异步任务OnPostChangePassword(UserModel UserModel)
{
如果(!ModelState.IsValid)
{
ModelState.Remove(“UserModel.changemail”);
AddModelError(“密码错误”,“密码不一致”);
}
返回页();
}
结果:

您想单独验证每个表单还是只在相应的位置显示验证消息?@Yinqiu,是的,您是对的,我想单独验证每个表单。这确实是一个有趣的解决方法,但可以接受!:-)好主意!
    <div>
    <form method="post">
        <span class="text-danger">@Html.ValidationMessage("PasswordError")</span>
        <div class="form-group">
            <label asp-for="UserModel.OldPassword"></label>
            <input asp-for="UserModel.OldPassword" class="form-control" />
            <span asp-validation-for="UserModel.OldPassword" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="UserModel.NewPassword1"></label>
            <input asp-for="UserModel.NewPassword1" class="form-control" />
            <span asp-validation-for="UserModel.NewPassword1" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="UserModel.NewPassword2"></label>
            <input asp-for="UserModel.NewPassword2" class="form-control" />
            <span asp-validation-for="UserModel.NewPassword2" class="text-danger"></span>
        </div>
        <button type="submit" class="btn btn-primary" asp-page-handler="ChangePassword">Change password</button>
    </form>
</div>
<div>
    <form method="post">
        <span class="text-danger">@Html.ValidationMessage("EmailError")</span>
        <div class="form-group">
            <label asp-for="UserModel.ChangeEmail"></label>
            <input asp-for="UserModel.ChangeEmail" class="form-control" />
            <span asp-validation-for="UserModel.ChangeEmail" class="text-danger"></span>
        </div>
        <button type="submit" class="btn btn-primary" asp-page-handler="ChangeEmail">Change email</button>
    </form>
</div>
public async Task<IActionResult> OnPostChangeEmailAsync(UserModel userModel)
    {
        
        if (!ModelState.IsValid)
        {
            ModelState.Remove("UserModel.OldPassword");
            ModelState.Remove("UserModel.NewPassword1");
            ModelState.Remove("UserModel.NewPassword2");
            ModelState.AddModelError("EmailError", "User not found or deleted");
        }
        return Page();
    }
    public async Task<IActionResult> OnPostChangePassword(UserModel userModel)
    {
       
        if (!ModelState.IsValid)
        {
            ModelState.Remove("UserModel.ChangeEmail");
            ModelState.AddModelError("PasswordError", "Password is inconsistent ");
        }
        return Page();
        
    }