2012-11-30 18 views
1

有什麼辦法可以使UserControl上的OutputCache無效?
我已經在我的網站上使用UserControls設置了部分緩存,並且工作正常。
我設置輸出緩存像這樣在我的用戶控件:在UserControl上以編程方式使OutputCache失效

<%@ OutputCache Duration="3600" VaryByParam="None" %> 

我的用戶contrlol位於/UserControls/SomeAction.ascx
所以我試圖用這個無效,並沒有奏效:

HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx"); 

我也嘗試過這種做法:
我設置HttpContext.Current.Cache.Insert("MyCache",DateTime.Now); Global.asax中的Application_Start函數裏面,Response.AddCacheItemDependency("MyCache");我的用戶控件的Page_Load functi內上。
我又試圖通過調用另一個函數以使它無效:

private void InvalidateCache() 
    { 
     HttpContext.Current.Cache.Insert("MyCache", DateTime.Now); 
    } 

它仍然沒有奏效。

有什麼辦法以編程方式使UserControl的緩存失效嗎?

回答

0

這可能是你的問題:

確保您設置緩存Location = "Server"否則會緩存客戶端機器上,然後你的代碼

HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");

應工作?

+0

用戶控件中不支持Location = Server'。我收到一個錯誤,並且聲明如此[這裏](http://msdn.microsoft.com/en-us/library/hdxfb6cy(v = vs.71).aspx)。 – ttkalec

-1

我認爲問題是,你是從控制本身,這將意味着控制基本上是試圖將自己從緩存中刪除通話RemoveOutputCacheItem ...

嘗試調用從另一個頁面HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");

+0

我不是從控件本身調用'RemoveOutputCacheItem'。它在完全獨立的頁面上。 – ttkalec

1

使用usercontrol的CachePolicy屬性可以創建對另一個緩存鍵的依賴關係。例如, 在用戶控件代碼

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.CachePolicy.Dependency = new System.Web.Caching.CacheDependency(null, 
     new string[] { "KeyForThisUserControl" }); 
    ... 
} 

和else,其中無效用戶控件的緩存,使用

Cache["KeyForThisUserControl"] = DateTime.Now; 

哪裏緩存是指當前Web應用程序緩存。

+0

我不確定如何使用您的代碼。如果我在我的用戶控件的'Page_Load'事件中設置了'CachePolicy.Dependency',我的緩存就不再工作了。 – ttkalec

+1

@ttkalec,不知道是什麼問題?您是否在添加依賴關係之前嘗試創建緩存鍵?同時檢查'SupportsCaching'屬性,否則該代碼可能會拋出異常。您可以嘗試將「PartialCachingAttribute」添加到用戶控件以啓用緩存(「OutCache」指令應該一直這樣做)。有關使用策略的更多詳細信息,請參閱緩存策略文檔:http://msdn.microsoft.com/zh-cn/library/system.web.ui.controlcachepolicy。aspx – VinayC

+0

謝謝,我不知道ControlCachePolicy類 – ttkalec

相關問題