我在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" />
我在这里缺少什么?是否需要额外的设置或其他?
答案 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构建可重用的“多重验证组按钮”,并附带代码。没试过,但看起来很有希望。