2011-07-25 41 views
0

我想以某種方式在MVC中的動作級別實現緩存。自定義MVC3緩存篩選器屬性

我知道OutputCache屬性,但我無法緩存整個頁面。

我想緩存動作返回的模型。

所以基本上,我想要創建一個過濾器來阻止action方法被調用,但讓MVC的行爲就像被調用一樣。

假設我打算忽略任何「返回視圖(」視圖名稱「)」假設所有將「返回視圖()」。

回答

0

你可以做部分緩存。 例如,您可以調用Html.RenderPartial()作爲常規操作不調用的操作方法,而是呈現局部視圖(最終是HTML片段)。這樣,您不會緩存整個頁面,而只會緩存那些頻繁更改的片段。

1

您可以創建一個過濾器,從ActionFilterAttribute

繼承這是我使用

public class CacheControlAttribute : ActionFilterAttribute 
{ 
    public CacheControlAttribute(HttpCacheability cacheability) 
    { 
     _cacheability = cacheability; 
    } 

    private readonly HttpCacheability _cacheability; 

    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache; 
     cache.SetCacheability(_cacheability); 
     cache.SetExpires(DateTime.Now); 
     cache.SetAllowResponseInBrowserHistory(false); 
     cache.SetNoServerCaching(); 
     cache.SetNoStore(); 

    } 
}