我在ASP.NET页面的UpdatePanel中有一个简单的中继器。此中继器在每个RepeaterItem中都有一个按钮,当单击该按钮时,会根据该特定RepeaterItem中包含的信息将您重定向到另一个页面。在那之前没有什么不寻常之处。
在我的开发计算机上,当我单击这些按钮中的一个时,我从ajax调用得到一个响应,如下所示
"1|#||N|M|pageRedirect||/somepage.aspx?q=bla|" 一切都像它应该做的那样工作。我猜脚本管理器会处理该指令,并通过JS将浏览器发送到somepage.aspx?q=bla。
当我将其部署到我的实际网站(专用服务器,我真的试图在两个环境中保持相同的配置,包括在我的开发计算机中使用IIS )时,这种行为发生了变化。当我单击这些按钮中的一个时,我会从服务器得到一个302Found响应,HTTP标头包括一个
Location: /somepage.aspx?q=bla指令。最终的结果是浏览器(FF、chome、IE)处理这两个页面(这意味着ajax调用和它们执行我试图重定向到的GET from页面),但只呈现原始页面,因此不会发生重定向。第二个页面已加载,但在“后台”中,并且从未显示。
我试图找出这两种不同行为背后的原因。通过谷歌搜索,我发现这可能是配置错误(例如,请参阅this question),但我在两台服务器上的配置是相同的。请记住,我不能在实际的网站上浪费太多的时间,所以现在我正在尝试让我的开发服务器像生产服务器一样工作,这样我就知道这种差异来自哪里,然后采取适当的行动。
任何帮助都将不胜感激。
发布于 2012-09-10 00:02:06
从ajax请求发回302重定向响应不起作用,因为重定向不会发生。因此,ASP.NET Ajax拦截服务器端的任何重定向,将其转换为状态码200,然后在客户端手动执行“重定向”(使用window.location)。
由于某些原因,ASP.NET Ajax (ScriptModule)在部署时不能正确转换您的302响应。我最好的猜测是它不认为这是一个ajax请求--为了判断它是否是一个ajax请求,它会查看它是否包含一个"X-MicrosoftAjax: Delta=true“头。检查已部署站点的服务器端是否接收到此标头。
https://stackoverflow.com/questions/12340341
复制相似问题