ASP.NET AJAX UpdatePanel - 在InitializeRequest中取消postback将不会重新启用。

4
在我的页面上,一个ASP.NET AJAX UpdatePanel里有一个提交按钮,它使用一些自定义的JavaScript验证并设置一个全局的_cancelGeneralSettingsUpdate标记,具体取决于验证结果。除非输入无效值,否则一切正常。在这种情况下,变量_cancelGeneralSettingsUpdate被正确地设置为false,但在页面尝试通过AJAX进行postback之前,initializeRequest函数不会被调用,导致postback失败。
我需要在用户纠正并重新提交无效输入后,能够使postbacks成功。不幸的是,一旦取消postback后,似乎无法正确连接到PageRequestManager管道。如果刷新页面,一切又都正常了,但是通过args.set_cancel(true);取消postback会使我陷入一种状态,在该状态下无法通过AJAX进行进一步的postback,直到刷新页面。
如何重新启用postbacks或使initializeRequest在随后的postback之前触发并设置这个呢?
我附上了一些代码。假设_cancelGeneralSettingsUpdate在任何尝试postback之前已经正确设置了,因为我已经验证过这一点。
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);
        }
    }

非常类似于这个问题。http://ajaxcontroltoolkit.codeplex.com/workitem/25755 - Chris Ballance
1个回答

2

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

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

在我的上面的例子中,我在自定义的initializeRequest处理程序中调用了args.set_cancel(false);。虽然这对第一个实例起作用,但在用户更正其无效输入并尝试重新提交表单后,它不允许未来的回发成功。
实际上,这只会中止当前正在进行的回发。在我的情况下,__doPostBack(...)还没有被调用,因此Sys.WebForms.PageRequestManager.getInstance().abortPostBack();悄悄地没有完成我期望的操作。
最终结果是使用两个按钮系统。如果不修复AJAX库,这是唯一合理的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接