如何将用户控件缓存一天

时间:2012-01-03 12:16:35

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

我有一个绘制表格的用户控件

我有另一个用户控件来绘制图像

我希望将用户控件缓存一天,这意味着每天如果用户访问表格,图像将仅首次生成并保存到缓存中,并从缓存中全天使用以进行后续访问。

此缓存应取决于三个键,包括登录的用户密钥

我已经为图像编写了自定义代码并且工作正常,我将这些图像存储到文件夹中。这不使用输出缓存。

现在我不知道如何将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,任何想法?

3 个答案:

答案 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上设置属性。

对于缓存的ControlLoadControl()会返回PartialCachingControl类型,您可以使用该类型将结果添加到Page。但是Control类本身不存在,因此您不能使用该引用来设置属性值或调用方法。

答案 2 :(得分:0)

如果没有将控件(PartialCachingControl)添加到页面中,它总是给出null,在您向页面添加某些方法并呈现控件之后,它将通过CachedControl属性为您提供访问权。