2012-09-09 30 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中的錯誤,因爲我檢查了服務器並且頭文件正在下降。 –