有没有办法在UserControl上使OutputCache无效?
我已经使用UserControls在我的网站上设置了部分缓存,并且工作正常
我在我的用户控件中设置了这样的输出缓存:
<%@ OutputCache Duration="3600" VaryByParam="None" %>
我的用户控制权位于/UserControls/SomeAction.ascx
所以我试图使用它来使它失效并且它不起作用。:
HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");
我也试过这种方法:
我在Global.asax的HttpContext.Current.Cache.Insert("MyCache",DateTime.Now);
函数中设置了Application_Start
,在我的用户控件的Response.AddCacheItemDependency("MyCache");
函数中设置了Page_Load
。
然后我试着通过调用另一个函数来使它失效:
private void InvalidateCache()
{
HttpContext.Current.Cache.Insert("MyCache", DateTime.Now);
}
它仍然无效。
有没有办法以编程方式使UserControl的缓存无效?
答案 0 :(得分:1)
使用usercontrol的CachePolicy属性创建对另一个缓存键的依赖关系。例如, 在用户控制代码中
protected void Page_Load(object sender, EventArgs e)
{
this.CachePolicy.Dependency = new System.Web.Caching.CacheDependency(null,
new string[] { "KeyForThisUserControl" });
...
}
否则 - 在哪里使用户控件的缓存无效,请使用
Cache["KeyForThisUserControl"] = DateTime.Now;
其中Cache指的是当前的Web应用程序缓存。
答案 1 :(得分:0)
这可能是你的问题:
确保设置缓存Location = "Server"
,否则它将缓存在客户端计算机上,然后缓存您的代码
HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");
应该有用吗?
答案 2 :(得分:-1)
我认为问题在于你是从控件本身调用RemoveOutputCacheItem,这意味着控件基本上是试图将自己从缓存中删除......
尝试从其他页面调用HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");
。