2012-02-07 57 views
2

我開始爲我的網站使用OutputCache。 我遇到的問題是,當用戶更新項目時,我需要重置該項目的緩存。ASP MVC 3 OutputCache避免緩存當前請求

我這樣做,使用:

var urlToRemove = Url.Action("Details", "Dress", new {id = model.Id}); 
Response.RemoveOutputCacheItem(urlToRemove); 

在編輯動作我還設置TempData的更新成功的消息,我將其顯示在一個請求。問題是該消息仍然保留在緩存的響應中。

你知道我怎樣才能避免在一個動作緩存。例如:

[OutputCache(Duration = 3600, VaryByParam = "id")] 
public ViewResult Details(int id) 
{ 
    if(NotificationHelper.HasNotifications) 
    Response.DoNotCache(); 
    ..... 

我無法使用相同的技巧...因爲頁面在渲染後被添加到緩存中。所以我無法從其緩存中排除一個動作。

回答

0

我不知道是否有簡單的方法來做你在問什麼。但是,我對消息和OutputCache的體驗不會將它們放入響應中。我最終確定沒有消息在緩存頁面上顯示。如果我絕對必須在緩存頁面上留言,我會設置一個ajax調用,一旦響應到達客戶端,就會獲取消息。

+0

如果您能夠整合第三方緩存庫,Erv建議使用甜甜圈來控制信息也是一個好主意。 – GavinW 2012-02-07 21:37:41

0

這個怎麼樣?

class CustomOutputCacheAttribute : OutputCacheAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     if (filterContext.HttpContext.Response.StatusCode >= 400) 
     { 
      this.Location = System.Web.UI.OutputCacheLocation.None; 
      this.Duration = -1; 
     } 

     filterContext.HttpContext.Response.Cache.SetOmitVaryStar(true); 
     base.OnActionExecuted(filterContext); 
    } 

}