Web用户控件有很多优点,最大的好处是有可视化的界面,让我们这么懒人可能更方便的设计界面。但我们使用时一般都是将它直接拖到页面中。这样做只是将页面的控件打包到一起,多处使用而已,还不能充分发挥它的强大功能。其实我一直在想,能不能在页面中动态加载它呢?就是根据不同的请求加载不同的用户自控义控件呢?
昨天刚好遇到了这个问题。经过一天的试验,终于可以把它实现了。步聚如下:
1、首先,制作Web用户控件。比如:a.ascx. b.ascx. c.ascx
分别为他们定义一个方法 (这一步可以不要,为了演示怎样调用方法):
public void BindData(...){...} 。作用是绑定数据。
2、将它们与关键字一同保存到数据库。
如
key control
a a.ascx
b b.ascx
c c.ascx
3、在页面的Page_Load()方法中加入以下代码:
首先是根据不同的请求取到,WebUserControl 的虚拟路径(略),保存到字符串变量path中。
UserControl control
=
(UserControl)LoadControl(path);
pnlMain.Controls.Add(control); // pnlMain是一个页面上的Panel
MethodInfo method = control.GetType().GetMethod( " BindData " ); // 这里用到了反射的东西,所以要Using System.Reflection
method.Invoke(control, new object [] ... { formId } ); // formId是实参。
pnlMain.Controls.Add(control); // pnlMain是一个页面上的Panel
MethodInfo method = control.GetType().GetMethod( " BindData " ); // 这里用到了反射的东西,所以要Using System.Reflection
method.Invoke(control, new object [] ... { formId } ); // formId是实参。
关于如何在页面中手工调用 在我Blog中另外一篇中有说明。