Javascript 如何停止更新面板当前进程和调用按钮单击事件

Javascript 如何停止更新面板当前进程和调用按钮单击事件,javascript,asp.net,Javascript,Asp.net,在myASP.NET页面中,我的用户可以在发送任何付款之前检查客户余额。余额更新标签位于更新面板内,有时检查客户余额的时间比平时长,因此用户可能只想取消检查并继续下一步 有没有办法停止当前的更新面板事件(当它正在运行且时间过长时)并使用JavaScript调用某个按钮单击事件?您可以使用代码取消更新面板的刷新 var divElem = 'AlertDiv'; var messageElem = 'AlertMessage'; Sys.Application.add_load(Applicat

在myASP.NET页面中,我的用户可以在发送任何付款之前检查客户余额。余额更新标签位于更新面板内,有时检查客户余额的时间比平时长,因此用户可能只想取消检查并继续下一步

有没有办法停止当前的更新面板事件(当它正在运行且时间过长时)并使用JavaScript调用某个按钮单击事件?

您可以使用代码取消更新面板的刷新

var divElem = 'AlertDiv';
var messageElem = 'AlertMessage';

Sys.Application.add_load(ApplicationLoadHandler)
function ApplicationLoadHandler(sender, args)
{
     Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(CheckStatus);
}
function CheckStatus(sender, args)
{
  var prm = Sys.WebForms.PageRequestManager.getInstance();
  if (prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'CancelRefresh') {
     prm.abortPostBack();
  }
  else if (prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'RefreshButton') {
     args.set_cancel(true);
     ActivateAlertDiv('visible', 'Still working on previous request.');
 }
  else if (!prm.get_isInAsyncPostBack() & args.get_postBackElement().id == 'RefreshButton') {
     ActivateAlertDiv('visible', 'Retrieving headlines.');
  }
}
function ActivateAlertDiv(visString, msg)
{
     var adiv = $get(divElem);
     var aspan = $get(messageElem);
     adiv.style.visibility = visString;
     aspan.innerHTML = msg;
}
if(typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
但是,ASP.NET请求的处理将在后台继续进行

如果用户在完成之前无法导航,则可能是ASP.NET会话锁定阻止了第二个请求的启动,直到第一个请求完成。您可以尝试检查第一个请求的代码中的属性,如果
false
,则将其中止。如果主线程正忙于处理,则可能需要在单独的线程中检查这一点,但这取决于应用程序的体系结构

一个更简单的建议是尝试禁用会话,或者在页面未使用会话或未写入会话时将其设置为只读(引用自):

如果您的页面没有修改任何会话变量,您可以选择退出大部分锁定

如果您的页面没有读取任何会话变量,您可以为该页面选择完全退出该锁

如果没有任何页面使用会话变量,只需在
web.config

我在C#中找到了一个解决方案。此代码放在更新UpdatePanel控件的代码中:

        Thread th = new Thread(DoSomething);
        th.Start();
        if (!th.Join(TimeSpan.FromSeconds(3)))
        {
            th.Abort();
        }

如果UpdatePanel的更新时间超过3秒,那么它只会中止当前线程。

这有什么用吗?实际上,我的目标是在UpdatePanel运行时取消其回发,或者如果回发时间过长。这不是链接解释的吗?它会禁用更新面板加载映像,但是页面一直在等待,直到第一个请求完成。这是否回答了您的实际问题“使用JavaScript调用[a]按钮点击事件”?另外,它从AJAX请求返回到浏览器的哪个HTTP响应会导致脚本错误?是的,会!要从JavaScript调用按钮单击事件,您只需使用:
document.getElementById('ctl00_MainContent_btnSubmit')。单击()