我在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构建可重用的“多个验证组按钮”,并附带代码。还没有尝试过,但是看起来很有希望。