我正在努力为我的开发人员遇到的问题找到答案。我自己也不太清楚......
我们正在使用带有C#的ASP.NET。
当用户按下页面上的按钮时,我们会调用一个操作员将会话变量保存到表单的当前视图状态(使用的某些ID)。
然后,我们调用具有其他功能的GreyBox窗口。
因为这是异步的,所以greybox不会等待处理程序响应。
在许多情况下,会话变量保存到视图状态之前会加载greybox,在这种情况下,灰色框没有必要的ID。
在本地主机上,它足够快,我们从未意识到问题。在生产中,这是一个问题。
这里有什么正确的解决方案?
答案 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请求时才有效。