我在Webuser控件(.ascx)上使用OutputCache
<%@ OutputCache Duration="1000" VaryByParam="none" %>
我想在接下来的1000秒钟内保留缓存,但是当加载网站上的特定页面时,我想删除/刷新/刷新缓存。就像,我想在加载MyPage.aspx时清除缓存。我可以以编程方式刷新缓存吗?
它只有一页是高速缓存,因此没有参数化版本可以刷新高速缓存。
感谢您的帮助。
最佳答案
您可以为此使用 VaryByCustom
参数。
在用户控件中,您将具有以下内容:
<%@ OutputCache Duration="1000" VaryByParam="None" VaryByCustom="MyKey" %>
然后,您将像这样在Global.asax中覆盖
GetVaryByCustomString
方法:public override string GetVaryByCustomString(HttpContext context, string arg)
{
if (arg == "MyKey")
{
object o = context.Current.Application["MyGuid"];
if (o == null)
{
o = Guid.NewGuid();
context.Current.Application["MyGuid"] = o;
}
return o.ToString();
}
return base.GetVaryByCustomString(context, arg);
}
最后,在
MyPage.aspx
中,您可以这样做:Application["MyGuid"] = Guid.NewGuid();
如何运作?
每当您的控件被缓存时,它就会与一个字符串相关联(当您的控件的
GetVaryByCustomString
键传递给它时,从VaryByCustom
方法返回的字符串)。每当随后使用该控件时,就会再次调用
GetVaryByCustomString
。如果返回的字符串与控件的缓存版本匹配,则使用该缓存版本。在我们的例子中,“MyKey”被传递到
GetVaryByCustomString
中,并返回存储在Application["MyGuid"]
中的任何内容。每当调用
MyPage.aspx
时,它将Application["MyGuid"]
更改为新的随机值。下次使用控件时,
GetVaryByCustomString
方法将返回新值,并且由于没有与该值关联的控件的缓存版本,因此将重新生成控件。 (然后,该控件将被缓存并与新值相关联,以保留到下一次调用MyPage.aspx
等时为止)有一个概述here。