我在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" />

我在这里想念什么?是否需要其他设置?

最佳答案

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

因此,要验证特定的组,您需要设置应该引起验证的按钮的ValidationGroup属性(以及可能的CausesValidation属性)。

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

编辑:如果您需要验证页面上的所有组,最简单的方法当然就是根本不使用验证组。但是,如果只想验证一些(但不止一个)组,则可以在服务器上(在按钮的单击处理程序中)通过调用以下命令来进行验证:

Validate("groupOne");
Validate("groupTwo");
// ...

请注意,这不会触发客户端验证。请参阅this post,以获取有关单击一次按钮即可触发多个验证组的讨论。

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

10-06 00:06