Asp.Net OutputCache和Expiration

时间:2009-01-26 22:05:57

标签: c# asp.net vb.net caching outputcache

我在包含usercontrol的页面上使用Asp.net OutputCache,在某些情况下,当编辑用户控件时,我希望能够使页面缓存失效并使用新数据重新加载页面。

我有什么办法可以在usercontrol中执行此操作吗?

如果没有,还有哪些其他缓存页面的方法可以让我以这种方式进行编辑。

-----------编辑-----------

经过一些研究后,我发现了一种似乎运作良好的方法。

Dim cachekey As String = String.Format("Calendar-{0}", calendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)
Response.AddCacheItemDependency(cachekey)

将向页面缓存对象添加依赖项,然后到期我执行此操作:

Dim cachekey as string = String.Format("Calendar-{0}", CalendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)

现在,只要知道依赖关系缓存密钥,就可以使页面过期。

3 个答案:

答案 0 :(得分:1)

你可以试试这个:

private void RemoveButton_Click(object sender, System.EventArgs e)
{
    HttpResponse.RemoveOutputCacheItem("/caching/CacheForever.aspx");
}

来自:http://aspalliance.com/668

感谢。

答案 1 :(得分:1)

您的解决方案对我不起作用。但是......经过一些测试后我得到了很好的工作。此代码将位于需要缓存的UserControl Page_Load中。

string key_refresh = "refresh_id_" + YourID;
Cache[key_refresh] = DateTime.Now.ToString();

CacheDependency dep = new CacheDependency(null, new string[] { key_refresh });
this.CachePolicy.Dependency = dep;

由于某些原因,当我从Response.AddCacheItemDependency更新数据时,使用Cache[key_refresh]没有任何效果。

在我的情况下,我按用户ID缓存我的控件,因此每个用户将拥有不同版本的此控件和不同的数据,我使用VaryByCustom单独缓存它。

答案 2 :(得分:0)

经过一些研究后,我发现了一种似乎运作良好的方法。

Dim cachekey As String = String.Format("Calendar-{0}", calendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)
Response.AddCacheItemDependency(cachekey)

将向页面缓存对象添加依赖项,然后到期我执行此操作:

Dim cachekey as string = String.Format("Calendar-{0}", CalendarID)
HttpContext.Current.Cache.Insert(cachekey, DateTime.Now, Nothing, System.DateTime.MaxValue, System.TimeSpan.Zero, System.Web.Caching.CacheItemPriority.NotRemovable, Nothing)

现在,只要知道依赖关系缓存密钥,就可以使页面过期。