MVC 5多个HtmlHelper.ValidationSummary在一页上

本文关键字:一页 ValidationSummary HtmlHelper 多个 MVC | 更新日期: 2023-09-27 18:17:32

我的登录页面有两个表单:

  • 登录

它们被定义为:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "");
    // form controls etc...
}

@using (Html.BeginForm("Register", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { role = "form" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "");
    // form controls etc...
}

当我提交其中一个表单并且存在验证错误时,问题发生,两个验证摘要都显示错误。

ValidationSummary方法有很多重载方法(https://msdn.microsoft.com/en-us/library/system.web.webpages.html.htmlhelper.validationsummary(v=vs.111).aspx),但是没有一个能解决这个问题。

期望的功能是:

  • 当Login表单上出现验证错误时,错误将显示在Login表单的ValidationSummary上,而Register表单上的ValidationSummary为空
  • 当Register表单上出现验证错误时,错误将显示在Register表单的ValidationSummary上,而Login表单上的ValidationSummary为空

MVC 5多个HtmlHelper.ValidationSummary在一页上

ValidationSummary仅显示ModelState中的任何错误(仅显示模型级错误或所有错误,取决于您传递给该参数的内容)。然而,重要的是,这里没有多种形式之间的区别。无论哪个表单有错误,ValidationSummary都会导致这些错误出现,正如您所看到的。

解决这个问题的唯一方法是有条件地显示ValidationSummary。您所需要的只是一些可以检查的post值,这些值只存在于其中一个表单中。这可能只是一个属性,一个有,另一个没有,或者你可以添加一个特定的值,通过使用隐藏输入或添加name属性到你的按钮。然后:

@if (ModelState.HasKey("MyUniqueKey"))
{
    @Html.ValidationSummary(true)
}