ValidationSummary在指定ValidationGroup时不起作用

时间:2011-07-06 11:19:46

标签: c# asp.net validation webforms

我在ASP.NET页面中有一些部分需要单独验证它们。

每个部分都有自己的验证摘要部分,因此我考虑将ValidationSummary标记与ValidationGroup属性一起使用,但它不起作用。

以下代码有效但验证了页面中的所有控件:

<asp:TextBox ID="field1" runat="server" TabIndex="1" MaxLength="20" />
<asp:RequiredFieldValidator ID="field1RequiredValidator" ControlToValidate="field1" runat="server"
Display="None" ErrorMessage="mandatory 1" />

<asp:TextBox ID="field2" runat="server" TabIndex="2" MaxLength="20" />
<asp:RequiredFieldValidator ID="field2RequiredValidator" ControlToValidate="field2" runat="server"
Display="None" ErrorMessage="mandatory 2" />

....

<asp:ValidationSummary ID="validationSummary" HeaderText="Sumary" runat="server" />

虽然以下内容不起作用(无需进行任何验证,但在提交时我只需转到向导的下一页):

<asp:TextBox ID="field1" runat="server" TabIndex="1" MaxLength="20" />
<asp:RequiredFieldValidator ID="field1RequiredValidator" ControlToValidate="field1" runat="server"
Display="None" ErrorMessage="mandatory 1" ValidationGroup="xxxx" />

<asp:TextBox ID="field2" runat="server" TabIndex="2" MaxLength="20" />
<asp:RequiredFieldValidator ID="field2RequiredValidator" ControlToValidate="field2" runat="server"
Display="None" ErrorMessage="mandatory 2" ValidationGroup="xxxx" />

....

<asp:ValidationSummary ID="validationSummary" HeaderText="Sumary" runat="server" ValidationGroup="xxxx" />

我在这里缺少什么?是否需要额外的设置或其他?

1 个答案:

答案 0 :(得分:15)

ASP.NET中的默认行为是,当用户单击未指定ValidationGroup的按钮(并且CausesValidation设置为true)时,所有的验证控件都不会属于验证组的人都经过验证。

因此,要验证特定组,您需要设置应该导致验证的按钮的ValidationGroup属性(也可能是CausesValidation属性)。

有关详细信息和示例,请参阅MSDN documentation for Button.ValidationGroup

编辑:如果您需要验证页面上的所有组,最简单的方法当然是根本不使用验证组。但是,如果您只想验证一些(但不止一个)组,可以通过调用:

在服务器上(在按钮的单击处理程序中)执行此操作。
Validate("groupOne");
Validate("groupTwo");
// ...

请注意,这不会触发客户端验证。有关在单击按钮上触发多个验证组的讨论,请参阅this post

编辑:我发现a blog post描述了如何为ASP.NET构建可重用的“多重验证组按钮”,并附带代码。没试过,但看起来很有希望。