2012-01-03 89 views
0

我有画表如何缓存用户控件一天

我有画图像

我想同时缓存用户控件一天另一个用户控制的用户控件,它每天用户访问表格的方式,图像将仅在第一次生成并保存到缓存中,并从缓存中全天使用,以便后续访问。

此缓存应该在三个键可以依靠包括登录的用户密钥

我已经写了自定义代码的图像,它工作正常,我保存这些图片的文件夹。这不使用输出缓存。

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

我不知道如何缓存一天。

按照指示由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总是给空,任何想法?

+0

请详细说明钥匙。他们是网址的一部分吗? – 2012-01-03 12:42:59

+0

不,它们是会话变量 – 2012-01-03 13:19:38

+1

然后'@ OutputCache'不会工作......剔除Cache对象中的数据。 – 2012-01-05 11:59:49

回答

2

试试这个:

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

哪里键1, Key2和Key3是控件的属性,其值用于更改缓存。

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

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

+0

Shared是什么意思?如果用户注销,这会持续多久? – 2012-01-04 06:27:47

+0

当我这样做时,我得到这个错误:Sys.WebForms.PageRequestManagerServerErrorException:无法强制'System.Web.UI.PartialCachingControl'类型的对象键入'Brady.TISCOR.TISCORDirect.WebHelper.DashboardControl'。 – 2012-01-04 09:22:04

+1

Shared =“true”表示输出缓存的键不包含包含该控件的页面的类型。否则,默认情况下,它将包含页面类型。是的,(无论哪种方式),如果用户注销,它将持续。对于你看到的错误,也许你可以发布一些代码? – RickNZ 2012-01-04 09:39:51

2

请尝试使用以下代码示例来缓存用户控件。在这里,你必须改变持续时间按照您的要求和用户控件的名称,按您的控制:

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

更多参考链接:http://msdn.microsoft.com/en-us/library/aa478965.aspx

+0

请注意,这是60_seconds_。那么UserKey怎么样? – 2012-01-03 12:24:33

+0

这不是帮助我,因为它依赖于CategoryDropDownList,我希望它依赖让我们说三个会话变量,而不是60秒它不应该更新缓存,直到最后一个缓存在当天更新 – 2012-01-03 12:33:34

+0

CategoryDropDownList是控制的名称例。你可以在那里给你的用户控制ID。 – 2012-01-03 12:39:00

0

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