我有一个绘制表格的用户控件
我有另一个用户控件来绘制图像
我希望将用户控件缓存一天,这意味着每天如果用户访问表格,图像将仅首次生成并保存到缓存中,并从缓存中全天使用以进行后续访问。
此缓存应取决于三个键,包括登录的用户密钥
我已经为图像编写了自定义代码并且工作正常,我将这些图像存储到文件夹中。这不使用输出缓存。
现在我不知道如何将Table存储到文件夹,所以我想使用用户控件的输出缓存来实现表的缓存。
我不知道如何将其缓存一天。
根据Rick的指示,我将以下指令添加到用户控件
<%@ OutputCache Duration="86400" VaryByParam="None" Shared="true"
VaryByControl="Key1;Key2;Key3" %>
并将以下代码写入消费者页面
DashboardControl dc = null;
Control control = (Control)Page.LoadControl(urlBuilder.GetCompleteURL().TrimEnd('?'));
if (control is DashboardControl)
{
dc = control as DashboardControl;
}
else if (control is PartialCachingControl && ((PartialCachingControl)control).CachedControl != null)
{
dc = (DashboardControl)((PartialCachingControl)control).CachedControl;
}
但是CachedControl总是给出null,任何想法?
答案 0 :(得分:2)
尝试使用以下代码示例来缓存用户控件。在这里,您必须根据您的要求更改持续时间,并根据您的控件更改用户控件名称:
<%@ OutputCache Duration="60" VaryByParam="none"
VaryByControl="CategoryDropDownList" %>
有关更多参考链接:http://msdn.microsoft.com/en-us/library/aa478965.aspx
答案 1 :(得分:2)
试试这个:
<%@ OutputCache Duration="86400" VaryByParam="None" Shared="true"
VaryByControl="Key1;Key2;Key3" %>
其中Key1,Key2和Key3是控件的属性,其值用于改变缓存。
当缓存输出Control
时,仅将其输出放在缓存中,而不是Control
本身。在使用输出缓存的后续请求中,对Control
的引用将为null,因此您需要在第一次引用时在Control上设置属性。
对于缓存的Control
,LoadControl()
会返回PartialCachingControl
类型,您可以使用该类型将结果添加到Page
。但是Control
类本身不存在,因此您不能使用该引用来设置属性值或调用方法。
答案 2 :(得分:0)
如果没有将控件(PartialCachingControl)添加到页面中,它总是给出null,在您向页面添加某些方法并呈现控件之后,它将通过CachedControl属性为您提供访问权。