2012-09-09 36 views
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),但只渲染原始页面,因此不需要重定向地点。第二页被加载,但在“背景”中并未显示。

我想找到背后这两种不同行为的原因。从我可以通过使用Google搜索找到的是,这可能是一个配置错误(例如,请参见this question),但我的配置在两台服务器中都是相同的。 请记住,我不能乱搞太多的实际网站,所以现在我试图让我的开发服务器像生产服务器一样行事,所以我知道这种差异来自哪里,然后采取适当的行动。

任何帮助将不胜感激。

回答

0

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

由于某些原因,ASP.NET Ajax(ScriptModule)在部署时未正确转换302响应。我最好的猜测是它不认为它是ajax请求 - 决定它是否是ajax请求,它会查看它是否包含“X-MicrosoftAjax:Delta = true”标头。检查是否在部署的站点的服务器端收到此标头。

+0

是的,浏览器似乎将该信息发送到服务器 ('X-Requested-With:XMLHttpRequest'和'X-MicrosoftAjax:Delta = true') –

+0

@EdFox您需要检查信息是否到达服务器方面,例如,防火墙可能会将其去掉 –

+0

我接受了您的回复,但我最终注册了点击作为触发器以强制进行完整回发。我认为这是一个在asp.net或telerik中的错误,因为我检查了服务器并且头文件正在下降。 –