2012-05-21 138 views
0

我正在使用Post Get重定向方法使用asp.net webforms提交表單。這是一個非常簡單的設置:ASP.NET Post獲取重定向瀏覽器歷史記錄問題

Step 1) Post form on Page1.aspx 
Step 2) Process form and redirect using Response.Redirect to Page2.aspx 
Step 3) Page2.aspx redirects using Response.Redirect to Page3.aspx 

如果你是在Page3.aspx和命中返回按鈕,我想應該把你帶回Page2.aspx和重定向你馬上回Page3.aspx。這會減少您重新訪問Page1.aspx並再次提交數據的機會。

相反,當我點擊後退按鈕時,我被直接帶回Page1.aspx。我也嘗試過使用303重定向,但這也不起作用。

這裏可能會發生什麼?

回答

0

你所看到的行爲是正確的。

各種瀏覽器,爲了更好地支持一些網站(如谷歌)如何運作,不保留在後面的歷史記錄中立即重定向的頁面。

考慮一下:

  1. 您搜索google.com
  2. 你點擊一個鏈接
  3. 在這個環節其實需要你回到google.coms服務器立即轉發你的實際頁面之前。

  4. 您認爲這不是正確的鏈接,並單擊後退按鈕。

在這一點上,大多數瀏覽器將帶你回到上確定步驟2中的頁面這是數以百萬計網民的正常期望和預期的行爲。

要回到步驟3只轉發到步驟4,會讓一些人失望。由於某些版本的IE最近做了修改,直到行爲被修補。

問題是,你所看到的行爲究竟是如何工作的其餘網絡。如果你真的想要的話,你應該研究一些其他機制來改變這一點。

更新


@NinjaBomb:不知怎的,我錯過了你的跟進問題,所以下面可能是沒有多大用處。

答案是,不是在c#代碼中做重定向,而是在page2中嵌入了一些javascript,在頁面加載完成時進行重定向。瀏覽器然後「存儲」頁面2的引用。當他們從3點擊後退按鈕時,它將返回到2,然後重定向到3.

當然,用戶可以簡單地按下後退按鈕兩次。 。打斷2的重定向並讓他們轉到1.我能想到的唯一的另一種方式是讓頁面1在加載時測試一些會話或cookie值,看看它們是否已經發送。如果是這樣,那麼第1頁應該做一個重定向而不是顯示自己。

+0

然後問題就變成了:我們如何強制瀏覽器保持歷史中的重定向頁面?就我而言,我認爲這是有道理的。 – NinjaBomb