动态加载用户控件

时间:2010-11-29 08:52:15

标签: c# asp.net user-controls

如何在页面中动态加载用户控件?
我有一个包含radioButtons的页面。每次单击单选按钮都会在页​​面中加载用户控件(.ascx) 我正在做的是同时加载所有控件,但将其可见性设置为false。当用户单击radiobutton时,我将特定用户控件的可见性设置为true 因此,我在每个回发上加载所有用户控件 还有其他可能的方法吗?

3 个答案:

答案 0 :(得分:14)

在页面上添加一个带有runat服务器的div,例如id为“divControls”。

Asp允许您动态加载用户控件“.ascx”。

以下代码可以解决您的问题。

Control ctrl = Page.LoadControl("UserControlPath");
divControls.Controls.Clear();
divControls.Controls.Add(ctrl);

答案 1 :(得分:1)

是否有任何具体原因要将用户控件保存在一个页面中?

在加载所有控件并设置其可见性时,请考虑页面视图状态。

我认为有两种可能的解决方案:

  1. 创建托管不同用户控件的seprate页面,当用户点击某个单选按钮时,重定向到相应的页面。

  2. 按需加载,即当用户请求用户控件时,只加载它但删除所有其他加载的用户控件,因此页面在任何时候都只有一个用户控件。

答案 2 :(得分:1)

如果您没有将它们保存在列表中,并且会话中的列表中存在,那么您将遇到很多麻烦。

Ghyath的方法是正确的,但你也应该将它们添加到List。

List<Object> Usercontrols = new List<Objects>{};
Control ctrl = Page.LoadControl("UserControlPath"); 
Usercontrols.Add(ctrl);
Session["Usercontrols"] = Usercontrols;

在每个回发中,您需要使用列表中的控件重新加载div。 编辑:我已经纠正了最后一行。