2008-08-22 64 views

回答

6

您可以嘗試使用HttpResponse.Cache property是否會有所幫助:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60)); 
Response.Cache.SetCacheability(HttpCacheability.Public); 
Response.Cache.SetValidUntilExpires(false); 
Response.Cache.VaryByParams["Category"] = true; 

if (Response.Cache.VaryByParams["Category"]) 
{ 
    //... 
} 

或者可能會與HttpResponse.CacheControl完全封鎖網頁的緩存,但有利於Cache屬性之上的它的被棄用:

Response.CacheControl = "No-Cache"; 

編輯:或者你可以真正go nuts和做這一切的手:

Response.ClearHeaders(); 
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1 
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 
0

對付它的最好的辦法是可能提出你的ASP.NET頁面no-cache指令(或母版頁,如果你正在使用一個)。我不認爲有一種方法可以直接在ASP.NET代碼中處理這個問題(因爲緩存決策發生在客戶端上)。對於MVC,不知道你會如何實現這一點(假設它不同於基於Web窗體的ASP.NET);而對於MVC,不知道如何實現它(假設它不同於基於Web窗體的ASP.NET);對於MVC,不知道如何實現它(假設它不同於基於Web窗體的ASP.NET)。我沒有用過它。

6

據我知道(或者至少已經閱讀)是其最好儘量不響應用戶事件工作,而是認爲「頁面」 ..

架構師應用程序,以便它不「不在乎如果後退按鈕被按下。它只會處理它。這可能意味着從發展的眼光來看一些額外的工作,但總體將使應用程序有很多更強大的..

即如果第3步執行一些數據chages,然後用戶點擊回到(第2步),然後再次點擊下一步,然後應用程序檢查是否已做出更改。或者理想情況下,它沒有任何更改直到用戶點擊「確定」結束..這樣,所有的變化都存儲,你可以重新填寫表格,基於之前輸入的值在加載時,每次...

我希望這是有道理的: )

+0

-1更多的是比實用的理想答案。一些應用程序從一開始就被設計成一種特殊的方式,當在一個預算緊張的大型團隊中工作時,將資源沉浸到改變架構中並不會給業務利益相關者帶來任何明顯的收益。此外,這不是真的回答這個問題。 – 2015-02-11 23:07:51

2

RFC 2616 §13.13歷史記錄和緩存是不同的東西。應該絕對沒有辦法讓緩存影響後退按鈕。

如果HTTP標頭的任何組合影響後退按鈕,這是瀏覽器中的一個錯誤......只有一個例外。

在HTTP中S瀏覽器將Cache-control: must-revalidate解釋爲使用「後退」按鈕時刷新頁面的請求(Mozilla稱之爲「傻銀行模式」)。這在純HTTP中不受支持。

0

下面的代碼在IE9 +,FF21和最新的Chrome爲我工作:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private); 
Response.Cache.AppendCacheExtension("must-revalidate"); 
Response.Cache.AppendCacheExtension("max-age=0"); 
Response.Cache.SetNoStore(); 

您可以在母版Page_Load()事件處理程序,以便在您的應用程序的每個頁面需要往返的地方這服務器時按下後退按鈕。