我的登录页面上有两种形式:

  • 注册
  • 登录

  • 它们的定义为:
    @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)有多种重载,但是它们都不能解决此问题。

    所需的功能是:
  • 当“登录”表单上出现验证错误时,该错误将显示在“登录”表单的ValidationSummary上,并且“注册”表单上的ValidationSummary为空白
  • 当“注册”表单上出现验证错误时,该错误将显示在“注册”表单的ValidationSummary上,并且“登录”表单上的ValidationSummary为空白
  • 最佳答案

    ValidationSummary仅显示ModelState中的任何错误(只是模型级别的错误或所有错误,具体取决于您为该参数传递的内容)。但是,重要的是,在多种形式之间没有区别。如您所见,无论哪种形式有错误,ValidationSummary都会导致这些错误出现。

    解决此问题的唯一方法是有条件地显示ValidationSummary。您所需要的只是一些可以检查的帖子值,该值仅存在于一种形式中。这可能只是一个拥有而另一个没有的属性,或者您可以通过使用隐藏的输入或向按钮添加name属性来添加特定的值。然后:

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

    关于c# - MVC 5 Multiple HtmlHelper.ValidationSummary在一页上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40549337/

    10-13 06:47