2010-11-29 107 views
7

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

回答

13

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

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

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

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

是否有任何具体的原因来保持在单个页面的usercontrols?

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

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

  1. 要么创建主机不同的用户控制和当在某些单选按钮用户点击,重定向到相应的页面seprate页。

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

1

如果你不把它们放在列表中,并且在会话中列表中,你将会遇到很多麻烦。

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

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

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