ASP.NET异步调用问题,等待处理程序返回

时间:2009-01-16 23:34:20

标签: c# asp.net asp.net-ajax

我正在努力为我的开发人员遇到的问题找到答案。我自己也不太清楚......

我们正在使用带有C#的ASP.NET。

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

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

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您需要确保从AJAX请求中使用回调方法运行其他代码。

如果您手动调用网络服务或网页方法,Sys.Net.WebServiceProxy.invoke方法会收到回调:http://msdn.microsoft.com/en-au/library/bb383814.aspx

我觉得David建议的PageRequestManager仅在您使用UpdatePanel执行AJAX请求时才有效。