我在ASP.NET页面的UpdatePanel中有一个简单的转发器。此转发器在每个RepeaterItem中都有一个按钮,而不是在单击时,将根据特定RepeaterItem中包含的信息将您重定向到另一个页面。在此之前没有任何异常。
在我的开发计算机中,当我单击其中一个按钮时,我收到来自ajax调用的响应,看起来像
"1|#||N|M|pageRedirect||/somepage.aspx?q=bla|"
一切都像它应该的那样。我猜测脚本管理器处理该指令并通过JS将浏览器发送到somepage.aspx?q = bla。
当我将其部署到我的实际网站(专用服务器,我真的尝试在两个环境中保持相同的配置,包括在我的开发计算机中使用IIS)时,这种行为会发生变化。当我点击这些按钮时,我从服务器获得302 Found响应,HTTP标头包含
Location: /somepage.aspx?q=bla
指令。最终发生的事情是浏览器(FF,chome,IE)处理两个页面(意思是ajax调用,他们从我尝试重定向的页面执行GET)但只渲染原始页面,因此不需要重定向地点。第二页已加载但在“背景”中并且从未显示过。
我试图找到这两种不同行为背后的原因。通过Google搜索我可以找到的是这可能是配置错误(例如,请参阅this question),但我的配置在两个服务器中都是相同的。 请记住,我不能在实际的网站上乱搞太多,所以现在我正在尝试让我的开发服务器像生产服务器一样工作,所以我知道这个差异来自哪里然后采取适当的行动。
任何帮助将不胜感激。
答案 0 :(得分:0)
从ajax请求发回302重定向响应不起作用,因为重定向不会发生。因此,ASP.NET Ajax拦截服务器端的任何重定向,将其转换为状态代码200,然后在客户端手动执行“重定向”(使用window.location)。
出于某种原因,ASP.NET Ajax(ScriptModule)在部署时没有正确转换302响应。我最好的猜测是它不认为这是一个ajax请求 - 决定它是否是一个ajax请求它看起来是否包含“X-MicrosoftAjax:Delta = true”标头。检查部署站点的服务器端是否收到此标头。