2011-03-17 117 views
27

验证摘要我的网页上有2种形式如下:指定的多种形式

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

如果SendConfirmation抛出一个错误,有显示2验证摘要。我如何获得验证摘要来定位它自己的?

回答

5

的解决方案是,当您验证表单

以了解详情this blog post

+1

这是两个验证摘要问题的答案。只绘制您想要显示的验证摘要。例如,用户点击登录。在控制器中,将诸如“CurrentAction”之类的模型的属性设置为“登录”。然后在视图中使用该属性以便不为表单的注册部分绘制验证摘要。 – 2013-12-30 15:08:20

0

为了做到这一点,你需要将两种形式分开,只画出了验证总结,把每一个在部分查看并在验证失败时返回提交的部分视图。更改您的行动结果以返回部分结果。

局部视图可以在页面中使用了呈现如下:

@Html.partial("_PartialView") 

还是这样,如果你需要传递一个模型

@Html.partial("_Partial", Model) 

你不能有两个验证摘要任何其他方式相同的页面。

-1

明确地定义形式的动作和控制器,如果你在1个视图有多种形式,如

@using (Html.BeginForm("SendCode", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

相信你有不同的操作这两种形式。

+0

这并不能解决问题,HtmlHelper.ValidationSummary方法只是读取ModelState字典中的错误并显示它们,无论它们来自哪种形式 – Nick 2016-11-11 13:55:55

2

Html.ValidationSummary()不需要在你的form元素的内部,你只需要它在大多数情况下。我会将它移动到两种形式之外,就像您的主体内容之上的东西,这应该会给您预期的效果。我相信我的最后一个应用程序,我把它放在布局文件中。

14

给提交按钮唯一的名称两个表单,像这样:

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" name="login-top" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" name="login-main" value="Resend" /> 
} 

然后,您可以检查通过检查密钥的请求的值的特定形式是否已提交了对应于提交按钮,然后有条件地显示验证摘要即。在顶部表格中您可以添加:

if (Request.Form.AllKeys.Contains("login-top")) 
{ 
    @Html.ValidationSummary() 
}