2010-05-21 115 views
1

我有一個web應用程序通過ajax獲取大量內容。例如,當用戶編輯一些數據時,瀏覽器將使用ajax post發送更改,然後執行ajax獲取新內容並用該內容替換頁面上的現有div。這只是找到MVC1,但在MVC2我會得到不一致的結果。ASP.NET MVC2和瀏覽器緩存

我發現默認情況下,MVC1在設置爲當前時間的響應頭中包含Expires項,但在MVC2中,Expires頭缺失。這是一些瀏覽器(IE8)實際使用ajax的緩存版本而不是新版本的問題。

爲了處理這個問題,我創建了一個簡單的ActionFilterAttribute,它將響應緩存設置爲NoCache(見下文),它可以工作,但似乎有點用各種控制器來裝飾這個屬性。是否有一種全球性的方式來爲每個控制器設置?

這是MVC2中的錯誤,它確實應該在每個ActionResult/view/page上設置過期?大多數MVC程序不處理數據輸入,其中陳舊的數據是非常糟糕的事情?

感謝


public class ResponseNoCachingAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     base.OnResultExecuted(filterContext); 

     filterContext.HttpContext.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 
    } 
} 

回答

4

你有沒有嘗試添加以下屬性到控制器?

[OutputCache(Location = OutputCacheLocation.None)] 
+0

是的,這將工作。我之前沒有注意到這個屬性。它仍然有點愚蠢,你必須把這個屬性放在每個控制器上,而不是在某個地方設置全局設置。謝謝。 – Dan 2010-05-23 12:26:34

+4

您可以使用該屬性聲明具有適當名稱的抽象基類控制器,並讓所有控制器都繼承該屬性。 – 2010-05-24 08:02:50