1. 如果页面的缓存设置为100秒 而用户控件里面设置的是50秒 则包括用户控件在内整个页面的缓存为100秒,
与用户控件的缓存设置无关. 

2.如果页面的缓存设置为50秒,而用户控件里面的设置为100秒 则页面其余部分刷新两次,用户控件才刷新一次.

3.用户设置的缓存时候要动态加载,下面是对用户控件包装 包装后才获取有效的ControlCachePolicy实例并且如果要设置用户控件的缓存机制 设置ControlCachePolicy实例只有在  Init和PreRender阶段之间才能成功操作.

下面是包装:
[PartialCache(20)]          //缓存过期为20秒,等效于<%@ OutPutCache Duration="20" %>  
                                       //注意这个时PartialCachingControl类的方法
//用户控件
Public Partial Class NewUesrControl : UserControl
{}


在动态加载时 用到了PartialCachingControl类,则ASP.NET会生成PartialCachingControl的实例来包装用户控件,此时来生成PartialCachingControl类实例还有一个必要的条件,即必须通过TemplaleControl.LoadControl方法来动态加载用户控件.

 1<script language="C#" runat="server">
 2    void Page_Init(object sender, EventArgs e)
 3    {
 4        //动态加载用户控件,并返回PartialCachingControl实例
 5        PartialCachingControl ppc = LoadControl("ControlForControlCachePolicy.ascx"as PartialCachingControl;
 6        //通过CachePolicy属性获取ControlCachePolicy实例
 7        ControlCachePolicy cacheSettings = ppc.CachePolicy;
 8        //如果用户控件的过期时间大于20秒就
 9        if (cacheSettings.Duration > TimeSpan.FromSeconds(20))
10        
11         //设置用户控件过期时间和缓存过期测略
12            cacheSettings.SetExpires(DateTime.Now.Add(TimeSpan.FromSeconds(10)));
13            cacheSettings.SetSlidingExpiration(false);
14        }

15        Controls.Add(ppc);
16    }

17    new void Page_Load(object sender, EventArgs e)
18    {
19        Label1.Text = "本页面的控件显示的时间为:(本页面缓存设置为5秒):<font color='blue'>" 
20            + DateTime.Now.ToString()+"</font>";
21    }

22</script>
posted on 2006-12-25 23:56  小角色  阅读(480)  评论(0编辑  收藏  举报