0

我在 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)但只呈现原始页面,因此不需要重定向地方。第二页已加载但在“背景”中并且从未显示。

我试图找出这两种不同行为背后的原因。通过谷歌搜索我可以发现这可能是一个配置错误(例如,请参阅这个问题),但我的配置在两台服务器中都是相同的。请记住,我不能过多地使用实际的网站,所以现在我正试图让我的开发服务器像生产服务器一样运行,这样我就知道这种差异来自哪里,然后采取适当的措施。

任何帮助将不胜感激。

4

1 回答 1

0

从 ajax 请求返回 302 重定向响应不起作用,因为重定向不会发生。因此,ASP.NET Ajax 拦截服务器端的任何重定向,将其转换为状态代码 200,然后在客户端手动执行“重定向”(使用 window.location)。

For some reason the ASP.NET Ajax (ScriptModule) isn't converting your 302 response correctly when it's deployed. My best guess is that it doesn't think it's an ajax request - to decide whether it's an ajax request it looks to see if it contains a "X-MicrosoftAjax: Delta=true" header. Check to see if this header is being received on the server side of your deployed site.

于 2012-09-09T16:02:06.073 回答