1

有什么方法可以使 UserControl 上的 OutputCache 无效?
我已经使用 UserControls 在我的网站上设置了部分缓存,并且工作正常。
我在我的用户控件中设置了这样的输出缓存:

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

我的用户控件位于/UserControls/SomeAction.ascx
所以我尝试使用它使其无效并且它不起作用。:

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

我也尝试过这种方法:
HttpContext.Current.Cache.Insert("MyCache",DateTime.Now);在 Global.asax 的Application_Start函数中设置,Response.AddCacheItemDependency("MyCache");在我的用户控件的Page_Load函数中设置。
然后我尝试通过调用另一个函数来使其无效:

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

它仍然没有工作。

有没有办法以编程方式使 UserControl 的缓存失效?

4

3 回答 3

2

使用 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 应用程序缓存。

于 2012-11-30T12:03:29.797 回答
0

这可能是你的问题:

确保您设置了缓存Location = "Server",否则它将缓存在客户端机器上,然后是您的代码

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

应该管用?

于 2012-11-30T11:28:48.550 回答
-1

我认为问题在于您正在从控件本身调用 RemoveOutputCacheItem,这意味着该控件基本上是在尝试将自身从缓存中删除...

尝试HttpResponse.RemoveOutputCacheItem("/UserControls/SomeAction.ascx");从另一个页面呼叫。

于 2012-11-30T11:32:58.340 回答