• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > net编程 >

动态加载控件: 常见问题解决之道(2)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-06-28点击:
我的例子,因为代码比较多,我就贴出如何调用的部分(也就是“ 如何用” 的代码)源码 可以在后面的链接中下载。

扩展性:虽然是为我那位邮友给出的答案,但是还是考虑了扩展性,我们可以尝试扩展用磁 盘文件、网络、或者数据库的方式来作为存储介质,当然,您必须为此实现部分接口。局限性 ,因为有存储介质一说,因此不同容器托管方面不允许同时使用多种存储介质,否则将会出现 两个集合,因此就带来了另一个扩展性,您可以自行实现扩展存储之间的数据同步,不过做此 之前提醒您一下,不同的存储介质可能存在不同的存储能力,比如Session 有大小限制,而数 据库简直就是容量大王,这些数据之间的同步可能会引发新的问题,另者就是这样的同步除了 看上去很酷之外并没有什么好处,将数据乱存的结果可能导致程序显得混乱,更尴尬的是数据 同步所白白消耗掉的性能。当然如果您只是练练手的话您确实可以这么做,做完记得告诉我一 下,哈哈,我也想不劳而获。哈哈。下面贴一下代码就不多做解释了,因为如果你理解了上面 这些,看懂那些代码就不可能有问题了。

public partial class _Default : System.Web.UI.Page
{
public ContainerManager.ContainerManager cm = new  ContainerManager.ContainerManager();

protected void Page_Load(object sender, EventArgs e)
{
//重载控件(HttpContext.Current.Cache作为存储介质)
cm.ReloadControls(HttpContext.Current.Cache,  "PlaceHolder_DynamicUserControlContainer",  PlaceHolder_DynamicUserControlContainer.Controls);
}

protected void btnInsertDynamicUserControl_Click(object sender,  EventArgs e)
{
//Control c1 = LoadControl("DynamicUserControl.ascx");
//PlaceHolder_DynamicUserControlContainer.Controls.Add (c1);

int displayCount;
int.TryParse(txtNumber.Text, out displayCount);
if (displayCount == 0)
{
//追加控件(Session作为存储介质)
Control c1 = LoadControl("DynamicUserControl.ascx");
cm.AppendControl(this.Session,  "PlaceHolder_DynamicUserControlContainer",  PlaceHolder_DynamicUserControlContainer.Controls, c1);
}
else if (displayCount == 1)
{
//追加控件(HttpContext.Current.Cache作为存储介质)
Control c1 = LoadControl("DynamicUserControl.ascx");
Control c2 = LoadControl("WebUserControl.ascx");
cm.AppendControl(HttpContext.Current.Cache,  "PlaceHolder_DynamicUserControlContainer",  PlaceHolder_DynamicUserControlContainer.Controls, c1);
cm.AppendControl(HttpContext.Current.Cache,  "PlaceHolder_DynamicUserControlContainer",  PlaceHolder_DynamicUserControlContainer.Controls, c2);
}
else
{
//常见的动态加载控件后点击其他回发事件就导致控件丢失 
PlaceHolder_DynamicUserControlContainer.Controls.Clear();
Control c1 = LoadControl("DynamicUserControl.ascx");
PlaceHolder_DynamicUserControlContainer.Controls.Add(c1);
cm.CacheControls(HttpContext.Current.Cache,  "PlaceHolder_DynamicUserControlContainer",  PlaceHolder_DynamicUserControlContainer.Controls);
}
}

protected void btnUnloadStorage_Click(object sender, EventArgs  e)
{
cm.Remove(HttpContext.Current.Cache,  "PlaceHolder_DynamicUserControlContainer");
}
}

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ