首页 新闻 会员 周边

ASP.NET 控件缓存问题

0
悬赏园豆:60 [待解决问题]

这边有一个页面,用的是几个 asp.net 的用户控件,其中用户控件使用了缓存。用户控件中有自定义属性,比如项目查询的控件,可以显示已完成的项目或者未完成的项目,配置这个属性即可。

现在遇到这么一个问题,我新建两个控件,对这两个控件单独 new ,赋属性,加入缓存,控件的内容正确,并且刷新之后内容仍然正确。

但是如果放到循环里,即把控件的路径和参数提取到数组中,并且在数组中循环新建控件,赋属性,加入缓存,在页面第一次加载是正确的,但之后刷新的时候就会都变成最后面的控件内容。

 

有大大能解释一下这个原理么或者给个解决方案么?

(不能在循环里加载缓存控件完全没办法提取成配置文件,这样这边设计就需要修改了)

 

下面是一个实例程序,直接F5运行即可,刷新一下页面就能看到效果。

点我下载实例代码

下面是一些主要代码,有思路及时回答哦,小弟拜谢。

            string[] cont = new string[] { "WebUserControl1.ascx", "WebUserControl1.ascx" };
            int[] tempSeconds = new int[] {20,60 };
            string[] param = new string[] { "循环第一次", "循环第二次"};
            for (int i = 0; i < 2; ++i)
            {
                cc = LoadControl(cont[i]);
                SetCacheTime(cc, tempSeconds[i]);
                lap.Controls.Add(cc);
                pcc = cc as PartialCachingControl;
                if (pcc.CachedControl != null)
                {
                    WebUserControl1 paracc1 = (WebUserControl1)pcc.CachedControl;
// 说明:这个para1 用来赋值给usercontrol1的一个textbox
// 首次载入的时候第一个是循环第一次,第二个是循环第二次
// 但刷新页面后第一个和第二个都变成了循环第二次。
// 但是如果不写成循环,而是代码分别写,
// 不管刷新几次都是循环第一次和循环第二次
                    paracc1.para1 = param[i];
                }
            }

 

 

张鲸落的主页 张鲸落 | 初学一级 | 园豆:144
提问于:2014-03-05 10:08
< >
分享
所有回答(1)
0

你可以看下你用 for 时,lap.Controls.Add 的两个控件其实是同一个,注意 pcc.CacheControl 的 ClientID.

Launcher | 园豆:45045 (高人七级) | 2014-03-05 10:45

好像是这样的,但是还是没头绪怎么处理啊,除了LoadControl有其他的办法能载入控件么?...

支持(0) 反对(0) 张鲸落 | 园豆:144 (初学一级) | 2014-03-05 15:03

@C:\WILLIN: 不知道,不会 Asp.Net

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2014-03-05 15:10

@Launcher: 哦... 不过仍然谢谢,之前确实没注意它根本就是一个控件。

支持(0) 反对(0) 张鲸落 | 园豆:144 (初学一级) | 2014-03-05 16:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册