ASP.NET - CustomValidator在回发后无法正常工作

时间:2014-07-28 13:03:57

标签: asp.net .net webforms

我有一个简单的案例。

页面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”被触发了。然后我尝试使用相同的按钮在我的文本框中重新提交我的表单,但是这次我的自定义验证器不再起作用了。

我的问题是为什么会出现这种情况?

我认为这是回发行为,因为如果我刷新页面,自定义验证器就会起作用。

1 个答案:

答案 0 :(得分:0)

我有完全相同的症状。当您遇到javaScript错误时,CustomValidator和UpdatePanel会很有趣。它可能是一些无辜的javaScript错误,但它会阻止Ajax请求完成。测试检查是否正确触发了ajax回发结束请求。

$(function () {
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);                        
});

function EndRequestHandler(sender, args) {
    alert('Postback!');
}