【发布时间】:2014-07-28 13:03:56
【问题描述】:
我有一个简单的案例。
页面 Default.aspx 中的自定义验证器
<asp:UpdatePanel ID="UplTab1" runat="server" >
<ContentTemplate>
<span>
<asp:TextBox ID="MyTextBox" runat="server" Width="400px"></asp:TextBox>
<asp:CustomValidator Display="Dynamic" ID="MyValidator" runat="server" ErrorMessage="Mon message" ControlToValidate="MyTextBox" OnServerValidate="MyValidator_OnServerValidate" ValidationGroup="MyGroup1"></asp:CustomValidator>
</span>
<span>
<asp:Button ID="BtnSave" runat="server" Text="Save" ValidationGroup="MyGroup1" OnClick="BtnSave_OnClick"></asp:Button>
</span>
</ContentTemplate>
</asp:UpdatePanel>
默认.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
}
protected void MyValidator_OnServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = MyValidationFunction();
}
当我尝试验证我的文本框控件时,它没有问题,我的函数“MyValidator_OnServerValidate”被触发。然后我尝试在我的文本框中使用具有不同值的相同按钮再次重新提交我的表单,但是这次我的自定义验证器不再起作用。
我的问题是为什么会有这种行为?
我认为这是回发行为,因为如果我刷新页面,自定义验证器就会起作用。
【问题讨论】:
-
它会回发吗?显示更多代码,相关的是
TextBox,它的 all 验证器,任何被执行的客户端代码,代码隐藏包括。Page_Load和方法MyValidator_OnServerValidate。也可以试试Display="Static"。 -
它在所有验证器工作的情况下第一次回发。第二次它可以回发但没有验证器工作......我添加了一些代码,但它是非常基本的示例,不多也不少......这就是为什么我觉得这很奇怪!:(
-
您是否使用验证摘要来显示消息?由于它是服务器端验证器,请尝试将验证摘要放在更新面板中。