【发布时间】:2013-01-28 18:04:16
【问题描述】:
我在我的 ASP.NET WebForms 页面上观察到一个非常奇怪的行为。我有一些输入控件,其中分配了一个或多个验证器。
TextBox 输入控件的简化示例:
<asp:TextBox ID="TextBoxX" runat="server"
CausesValidation="True"></asp:TextBox>
<asp:RequiredFieldValidator ID="V1" runat="server"
ControlToValidate="TextBoxX"
ErrorMessage="blah blah"
EnableViewState="False" />
<asp:RangeValidator ID="V2" Type="Integer" runat="server"
ControlToValidate="TextBoxX"
ErrorMessage="blah blah"
MinimumValue="0" MaximumValue="9999"
EnableViewState="False" />
<asp:CustomValidator ID="V3" runat="server"
ErrorMessage="blah blah"
OnServerValidate="MyCustomValidateMethod"
EnableViewState="False"
EnableClientScript="False" />
EnableViewState 被有意设置为 false 以保持低网络负载。 V3 是一个令人感兴趣的。在服务器上,我的自定义方法将根据值的合理性进行验证。
protected void MyCustomValidateMethod(object source, ServerValidateEventArgs args)
{//...}
到目前为止,一切都按预期工作。但我也有一个复选框,允许用户在显示警告后显式覆盖合理性检查。
<asp:CheckBox ID="CheckBoxOverride" runat="server" Text="You can override here!"
AutoPostBack="True"
CausesValidation="True" />
选中/取消选中CheckBox 会按预期导致回发,但验证器(尤其是“V3”)仅在复选框被选中时调用,而不是在未选中时调用!
是什么导致了这种奇怪的行为以及如何解决它?
这里有更多信息:
- 我正在使用 .NET 3.5。
- 如果重要的话,这里的全部内容都在一个 UpdatePanel 中。
- 我可以在回发时显式调用
Page.Validate();,但这对我来说似乎很脏,并且当复选框被选中时验证器会被调用两次。
【问题讨论】:
标签: asp.net checkbox webforms postback validation