2009-01-16 214 views
1

我试图为我的开发人员遇到的问题找到答案。我自己也不太清楚......ASP.NET异步调用的问题,等待处理程序返回

我们在C#中使用ASP.NET。

当用户按下页面上的按钮时,我们调用hander将会话变量保存为表单的当前视图状态(使用的一些ID)。

然后,我们调用具有其他功能的GreyBox窗口。

因为这是异步的,所以greybox不会等待处理程序作出响应。

在许多情况下,在会话变量保存到视图状态之前加载灰盒,在这种情况下,灰盒没有必要的ID。

在本地主机上,速度很快,我们从未意识到问题。在生产中,这是一个问题。

这里的正确解决方案是什么?

回答

4

向服务器保存会话的异步调用将返回对客户端的响应。直到您从服务器获得成功回复后才能启动greybox。如果只有一件事导致您的形式异步回发,那么你可以这样做插入的答复:

<script type="text/javascript"> 
    //<![CDATA[ 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    prm.add_endRequest(endRequest); 
    function endRequest(sender, e) { 
     // Do stuff 
    } 
    //]]> 
</script> 

对于更复杂的场景中看到article on MSDN在这个问题上。

0

您需要确保您的附加代码正在AJAX请求的回调方法中运行。

如果手动调用Web服务或页面方法Sys.Net.WebServiceProxy.invoke方法接受一个回调:http://msdn.microsoft.com/en-au/library/bb383814.aspx

我有一种感觉,如果你正在使用一个UpdatePanel执行AJAX是大卫建议PageRequestManager只能请求。