简体   繁体   English

ASP.NET-回传后,CustomValidator无法正常工作

[英]ASP.NET - CustomValidator not working after postback

I have a simple case. 我有一个简单的案例。

A custom validator in page Default.aspx 页面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 Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
}

protected void MyValidator_OnServerValidate(object source, ServerValidateEventArgs args)
{
    args.IsValid = MyValidationFunction();
}

When I try to validate my textbox control, no problem it works, my function "MyValidator_OnServerValidate" is fired. 当我尝试验证文本框控件时,它没有问题,我的函数“ MyValidator_OnServerValidate”被触发。 Then I try to re-submit my form again with same button with a different value in my textbox, but this time my custom validator doesn't work anymore. 然后,我尝试使用文本框中具有不同值的相同按钮再次重新提交表单,但这一次我的自定义验证器不再起作用。

My question is why this behavior? 我的问题是为什么这种行为?

I think it's the postback behavior because if I refresh my page, the custom validator works. 我认为这是回发行为,因为如果刷新页面,则自定义验证程序将起作用。

I had exactly the same symptoms. 我有完全相同的症状。 CustomValidator and UpdatePanel acts funny when you have javaScript errors. 当您遇到javaScript错误时,CustomValidator和UpdatePanel表现得很滑稽。 It may be some innocent javaScript error but it will stop Ajax request to complete. 可能是一些无辜的javaScript错误,但它将停止Ajax请求完成。 To test that check whether your ajax postback end request is fired correctly. 要测试以检查您的ajax回发结束请求是否被正确触发。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM