在UserControl上以编程方式使OutputCache无效

时间:2012-11-30 11:26:14

标签: c# asp.net caching user-controls outputcache

有没有办法在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的缓存无效?

3 个答案:

答案 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");