2016-11-11 102 views
3

我有我的登录页面上有两种形式:MVC在一个页面上5多HtmlHelper.ValidationSummary

  • 注册
  • 登录

它们被定义为:

@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为空白
+0

请查看以下链接.http://stackoverflow.com/questions/5342427/specify-validation-summary-on-multiple-forms –

+0

感谢@RonakPatel,我刚开始看这一做法为了解决问题。该HtmlHelper.ValidationSummary大概距离的ModelState字典中读取并显示在它 – Nick

+0

的项目我很好奇什么是模型/视图模型是要传递到你的剃须刀看法?而且,你为什么不考虑使用局部视图来渲染注册和登录表单?它可以触发控制器正确的ValidationSummary而不必使用某种标志在视图中显示正确的验证摘要。 – kimbaudi

回答

1

ValidationSummary只显示任何错误在ModelState(要么只是模型级或全部错误,这取决于你传递什么param所)。然而,重要的是,这里没有多种形式的区别。无论哪种形式的有错误,ValidationSummary将导致这些错误的出现,如您所见。

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

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

感谢您的解释,我用我已经实现的代码编辑你的解决方案 – Nick

+1

我必须使用@if(ViewData.ModelState.ContainsKey(“MyUniqueKey”))\t {@ Html.ValidationSummary(true)}' ,但这个想法是一样的。 – jerone