我的登录页面上有两个表单:
它们被定义为:
@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)有各种重载,但它们都没有解决这个问题。
所需的功能是:
答案 0 :(得分:5)
ValidationSummary
只显示ModelState
中的任何错误(只是模型级别或所有错误,具体取决于您为该参数传递的内容)。然而,重要的是,多种形式之间没有区别。无论哪种形式有错误,ValidationSummary
都会导致出现这些错误,如您所见。
解决此问题的唯一方法是有条件地显示ValidationSummary
。您所需要的只是一些可以检查的值,这些值只存在于其中一个表单中。这可能只是一个属性而另一个没有,或者您可以通过使用隐藏输入或向按钮添加name属性来添加特定值。然后:
@if (ModelState.HasKey("MyUniqueKey"))
{
@Html.ValidationSummary(true)
}