编程语言
首页 > 编程语言> > javascript – ASP.NET AJAX UpdatePanel – 取消InitializeRequest中的回发将不会重新启用重新启用

javascript – ASP.NET AJAX UpdatePanel – 取消InitializeRequest中的回发将不会重新启用重新启用

作者:互联网

在我的页面上的ASP.NET AJAX UpdatePanel中,我有一个提交按钮,其中应用了一些自定义javascript验证,根据验证结果设置全局_cancelGeneralSettingsUpdate标志.

除非您输入无效值,更正并重新提交,否则一切正常.在这种情况下,变量_cancelGeneralSettingsUpdate被正确设置为false,但在页面尝试通过AJAX回发之前不调用initializeRequest函数,导致回发失败.

一旦纠正了无效输入并且用户再次单击提交按钮,我需要能够使回发成功.遗憾的是,一旦取消回发,我似乎没有正确连接到PageRequestManager管道.如果我刷新页面,一切都会再次起作用,但是通过args.set_cancel取消回发(true);
 让我进入一种状态,在这种情况下,我无法通过AJAX进行进一步的回发,直到页面刷新为止.

如何重新启用回发或导致initializeRequest在后续回发之前触发并设置它?

我附上了一些代码.假设在任何尝试回发之前正确设置_cancelGeneralSettingsUpdate,因为我已经验证了这一点.

var _cancelGeneralSettingsUpdate = false;

function initializeRequest(sender, args) {
        var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
        if (!pageRequestManager.get_isInAsyncPostBack() & args.get_postBackElement().id == '<%= UpdateWorkgroupGeneralButton.ClientID %>')
        {
            if (_cancelGeneralSettingsUpdate) {
                args.set_cancel(true);
                // Show error message
            }
            else {
                args.set_cancel(false);
            }
        }
        else {
            args.set_cancel(false);
        }
    }

解决方法:

以为我找到了解决方案.在我的情况下,正确的做法是在我的JavaScript验证失败时调用此函数

 Sys.WebForms.PageRequestManager.getInstance().abortPostBack();

在上面的例子中,我调用了args.set_cancel(false);在自定义initializeRequest处理程序中.虽然这适用于第一个实例,但在用户更正了无效输入并尝试重新提交表单后,它不允许未来的回发成功.

这实际上只会中止当前正在进行中的回发.在我的情况下__doPostBack(…)尚未被调用,所以Sys.WebForms.PageRequestManager.getInstance().abortPostBack();默默无法做我所期待的事.

最终结果是使用双按钮系统.如果没有修复AJAX库,这是唯一合理的选择.

标签:javascript,ajax,asp-net,ajaxcontroltoolkit
来源: https://codeday.me/bug/20190705/1383352.html