2009-10-09 2 views
3

У меня есть page1.aspx:Как удалить OutputCache программно для ascx?

<%@ Register src="uc1.ascx" tagname="UcHead" tagprefix="uc1" %> 

и uc1.ascx с помощью OutputCache:

<%@ OutputCache Duration="18000" VaryByParam="*" %> 

Как я могу нажать на кнопку в другом page2.aspx удалить OutputCache для uc1.ascx или page1.aspx?

Когда OutputCache в page1.aspx, я могу использовать следующий код для удаления OutputCache:

string url = "/page1.aspx"; 
HttpResponse.RemoveOutputCacheItem(url); 

Но это не работает, когда OutputCache в uc1.ascx.

ответ

5

Ok попробовать эту

В загрузке страницы вашего пользовательского элемента управления сайте:

HttpRuntime.Cache.Insert("myCacheKey", DateTime.Now); 

BasePartialCachingControl pcc = Parent as BasePartialCachingControl; 
pcc.Dependency = new CacheDependency(null, new string[]{"myCacheKey"}); 

Измените ключ к тому, что вы хотите, чтобы это было для контроля.

Затем в коде случае, если вы хотите, чтобы очистить кэш положить:

Cache.Insert("myCacheKey", DateTime.Now); 

Я видел это решение в http://dotnetslackers.com/ASP_NET/re-63091_ASP_NET_clear_user_control_output_cache.aspx

Я проверил это, и это, кажется, работает, хотя у меня есть для повторного обновления страницы после того, как я вызываю это, чтобы увидеть обновленный контент управления.

+0

Он работает, когда OutputCache находится в page1.aspx. Но это не работает, когда OutputCache находится в uc1.ascx. – Mike108

+0

Я обновил свой ответ, посмотрим, работает ли это. Я никогда не пытался выводить элементы управления кэшем, поэтому я заинтересован в том, как это сделать. –

+0

Это здорово! Большое спасибо! И мой маленький совет: код должен быть помещен в конец page_load UC после привязки gridview, в противном случае gridview не обновляет outputcache правильно. – Mike108