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);
}
}
是的,這將工作。我之前沒有注意到這個屬性。它仍然有點愚蠢,你必須把這個屬性放在每個控制器上,而不是在某個地方設置全局設置。謝謝。 – Dan 2010-05-23 12:26:34
您可以使用該屬性聲明具有適當名稱的抽象基類控制器,並讓所有控制器都繼承該屬性。 – 2010-05-24 08:02:50