2

我有一個MVC 3項目,大量使用片段動態加載不同頁面的內容。有些頁面發回控制器以上傳文件。上傳完成後,我想將用戶重定向到他們來自的頁面。我將返回URL傳遞給上傳操作,然後在上傳完成後將用戶重定向回該頁面。重定向到一個URL,IE 8忽略片段

這可以在Chrome和Firefox中正常工作,但是IE忽略了片段,並且我被帶回到解決方案中的根頁面。以下是我用來重定向用戶的代碼。

public virtual ActionResult UploadFile(string returnURL) 
{ 
    // Do some work here... 
    return Redirect(returnURL); 
} 

有什麼辦法可以強制IE 8保留片段並像Chrome和Firefox一樣行事嗎?

如果沒有,是否有標準的方法來解決這個問題?

我也評論過Eric重定向和片段的Eric Law的article。它提供了關於片段如何由不同瀏覽器處理的一些見解。

+0

(1)當你被重定向回來,IE地址欄中的url是否包含你的片段,以及(2)你能顯示使用片段導航的客戶端代碼嗎? – 2012-07-26 18:46:52

+0

(1)不,IE在重定向後不會在URL中顯示片段。 (2)客戶端代碼似乎並不重要。如果我重定向到一個帶有片段的stackoverflow url,IE會丟棄這個片段,但Chrome和Firefox會保留它。 – 2012-07-26 19:08:00

回答

2

你可能會在這一個小河上。 URL片段對於URL的唯一性並不重要,比如決定是將頁面添加到瀏覽器緩存還是將URL添加到瀏覽器導航歷史記錄中。

URL查詢包含在URL唯一性分類中,但片段不是。

可能是IE8重定向到帶有片段的URL,但它正在從瀏覽器緩存加載根頁面(沒有片段),因爲該片段對於URL緩存等效性測試並不重要。

測試此理論的一種蠻力方法可能是清除瀏覽器緩存並將所有頁面標記爲服務器上的no-cache,並查看是否會更改IE8行爲。如果IE8在頁面不在瀏覽器緩存中時重定向到所需的頁面,並且片段完好無損,那麼這將確認理論。這只是一個測試場景,不是生產部署的解決方案。

+0

不幸的是,no-cache設置不會影響行爲。 – 2012-07-11 17:57:19

0

我已經構建了一個小應用程序來重現它。它在IE9和Chrome中按預期工作。

我對你有兩個建議:

  • 如果它是一個緩存的問題將在URL中的時間戳可以幫助。嘗試建立一個URL是這樣的:

http://localhost:50173/Sample/?timestamp=26.07.2012%2021:11:00#myLocation

  • 如果它不工作解決方法可能是呈現在最後一個javascript將瀏覽:

window.location = window.location + "#myLocation";

+1

我同意IE9和Chrome的工作,不幸的是,我必須處理IE 8,這似乎有問題。我無法在我的js中對片段進行硬編碼,因爲它基於用戶嘗試擊中的頁面進行動態顯示。一個用例是用戶去了一個URL,但他們的會話超時,他們需要重新登錄。重新登錄後,我想把他們帶回他們所在的頁面。 – 2012-07-26 19:40:55