如何将用户控件缓存一天

本文关键字:缓存 一天 控件 用户 | 更新日期: 2023-09-27 18:19:14

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

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

我想缓存用户控制一天,这意味着每天如果用户访问表和图像将仅在第一次生成,并保存到缓存,并从缓存中使用一整天的任何后续访问。

这个缓存应该依赖于三个键,包括登录的用户键

我已经为图像编写了自定义代码,它工作得很好,我将这些图像存储到一个文件夹。这是不使用输出缓存的。

现在我不知道如何将表存储到文件夹中,所以我想使用用户控件的输出缓存来实现表的缓存。

我不知道如何缓存一天。

按照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,你知道吗?

如何将用户控件缓存一天

试试这个:

  <%@ OutputCache Duration="86400" VaryByParam="None" Shared="true"
      VaryByControl="Key1;Key2;Key3" %>

其中Key1, Key2和Key3是控件上的属性,其值用于改变缓存。

Control被输出缓存时,只有它的输出被放在缓存中,而不是Control本身。在使用输出缓存的后续请求中,对Control的引用将为null,因此您需要在第一次引用控件时设置控件属性。

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

尝试使用以下代码示例缓存用户控件。在这里,您必须根据您的需求更改持续时间,并根据您的控件更改用户控件名称:

    <%@ OutputCache Duration="60" VaryByParam="none" 
    VaryByControl="CategoryDropDownList" %>

更多内容请参考:http://msdn.microsoft.com/en-us/library/aa478965.aspx

如果控件(PartialCachingControl)没有添加到页面中,它总是给出null,在您以某种方式添加到页面并呈现控件之后,它将通过CachedControl属性给您访问