在我页面上的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);
}
}
答案 0 :(得分:2)
思考我找到了解决方案。在我的情况下,正确的做法是在我的JavaScript验证失败时调用此函数
Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
在上面的示例中,我在自定义args.set_cancel(false);
处理程序中调用initializeRequest
。虽然这适用于第一个实例,但在用户更正了无效输入并尝试重新提交表单后,它不允许未来的回发成功。
这实际上只会中止当前正在进行中的回发。在我的情况下,__doPostBack(...)
尚未被调用,因此Sys.WebForms.PageRequestManager.getInstance().abortPostBack();
默默无法按照我的预期行事。
最终结果是使用双按钮系统。如果没有修复AJAX库,这是唯一合理的选择。