2009-04-07 85 views
0

我有一個非常數據庫和用戶密集的應用程序。用戶非常喜歡導航的瀏覽器歷史按鈕。什麼是處理通過asp.net中的瀏覽器歷史記錄加載頁面的最佳方式?

如果用戶從他們的瀏覽器歷史記錄中挑選出某些內容,是否可以絕對保證頁面能夠重新加載?

我經常看到的是,頁面的副本將從瀏覽器緩存中顯示出來,而不是被重新加載。

我已經試過:這些

this.Response.Cache.SetNoStore() 
this.Response.Cache.SetNoServerCaching() 
this.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache) 

而且

this.Response.Cache.SetExpires(DateTime.Now.AddSeconds (-1)); 

無似乎幫助,有時瀏覽器將反正加載舊緩存版本。

回答

2

你需要兩個語句以防止緩存:

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); // For IE Response.Cache.SetNoStore(); // For Firefox

更多細節請參見:

http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

另外,請確保您始終遵循帶重定向的POST,以便後退按鈕正常工作:

http://blog.httpwatch.com/2007/10/03/60-of-web-users-can%E2%80%99t-be-wrong-%E2%80%93-don%E2%80%99t-break-the-back-button/

1

看到舊數據有什麼危險?如果擔心用戶會與舊數據交互或試圖更改「舊」數據,那麼當用戶提交時,服務器端代碼不應該能夠處理請求以處理「舊數據」或數據不再有效?

防止用戶不應該在服務器端進行交互的數據的「意外」更新可能要容易得多,而不是阻止任何客戶端存​​儲存儲頁的副本在他們的瀏覽器歷史或緩存中。你不可能完全呈現後者。

換句話說,您最好確保這些類型的錯誤不會進入您擁有控制權的應用程序 - 服務器端代碼 - 而不是希望與您的網站進行交互的每個瀏覽器均尊重你的緩存標題,每個瀏覽器遵循HTTP/HTML標準等。

+0

編輯舊數據不是問題,我們可以輕鬆處理。用戶感到困惑,他們的更改沒有顯示在頁面上。 – ilivewithian 2009-04-08 07:59:22

0

我不會太在意緩存。

ASP.Net中的問題是回發事件和ViewState意味着服務器可能不會以相同的方式兩次呈現相同的URL。相反,它將當前應用程序的「狀態」考慮在內。因此,當用戶點擊後退按鈕時,由於viewstate和其他回發數據不可用,因此無法按照他們期望的方式查看頁面。

要保持後退按鈕正常工作,您需要關閉ViewState並使用Response.Redirect處理所有服務器事件到新的URL。

1

你確定瀏覽器緩存是問題嗎?

Response.Cache.SetCacheability(HttpCacheability.NoCache) 

應該工作。您是否嘗試過不同的瀏覽器或受到所有瀏覽器的影響?

2

如果您使用3.5框架,您可以使用歷史記錄服務器控件來管理瀏覽器歷史記錄中的內容。

這裏是一個視頻,並提示使用它的一些博客文章:

Video: How Do I Use the ASP.NET history control?
Back Button Support for ASP.NET Update Panels
ASP.NET: Managing Browser History with AJAX and UpdatePanels
Tip/Trick: Enabling Back/Forward-Button Support for ASP.NET AJAX UpdatePanel

更新:如前所述詮釋他的評論,您使用的是2.0版本的框架。這裏是一個鏈接解釋如何使用基於.NET 2.0這個控制: Using ASP.NET 3.5 History Control with ASP.NET 2.0

+0

我使用asp.net 2.0 – ilivewithian 2009-04-08 08:06:58

相關問題