我有一个简单的案例。
页面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>
Default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
}
protected void MyValidator_OnServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = MyValidationFunction();
}
当我尝试验证我的文本框控件时,没有问题,我的函数“MyValidator_OnServerValidate”被触发了。然后我尝试使用相同的按钮在我的文本框中重新提交我的表单,但是这次我的自定义验证器不再起作用了。
我的问题是为什么会出现这种情况?
我认为这是回发行为,因为如果我刷新页面,自定义验证器就会起作用。
答案 0 :(得分:0)
我有完全相同的症状。当您遇到javaScript错误时,CustomValidator和UpdatePanel会很有趣。它可能是一些无辜的javaScript错误,但它会阻止Ajax请求完成。测试检查是否正确触发了ajax回发结束请求。
$(function () {
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
});
function EndRequestHandler(sender, args) {
alert('Postback!');
}