在多个表单上指定验证摘要

时间:2011-03-17 16:54:06

标签: asp.net-mvc asp.net-mvc-3

我在页面上有两个表单如下:

@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 个答案:

答案 0 :(得分:17)

在表单上为提交按钮添加唯一名称,如下所示:

@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()
}

答案 1 :(得分:6)

解决方案是仅在验证表单时绘制验证摘要

有关详情,请查看this blog post

答案 2 :(得分:2)

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

答案 3 :(得分:0)

为了实现这一点,您需要将两个表单分开,将每个表单放在局部视图中,如果验证失败,则返回提交时的部分视图。更改您的操作结果以返回部分结果。

可以使用以下内容在页面中呈现部分视图:

@Html.partial("_PartialView")

或者这种方式,如果您需要传递模型

@Html.partial("_Partial", Model)

您不能以任何其他方式在同一页面上拥有两个验证摘要。

答案 4 :(得分:-2)

如果在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" />
}

相信两种形式都有不同的行为。