动态加载用户控件

7

如何在页面中动态加载用户控件?
我有一个包含单选按钮的页面。每次单击单选按钮都会在页面中加载一个用户控件(.ascx)。
我的做法是一次性加载所有控件,但将它们的可见性设置为false。当用户单击单选按钮时,我将特定用户控件的可见性设置为true。
结果是每次postback都要加载所有用户控件。
是否有其他可能的方法来解决这个问题?

3个回答

14

在页面上添加一个带有id为"divControls"且具有runat server属性的div元素。

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

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

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

1

将用户控件放在单个页面中是否有特定的原因?

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

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

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

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


如果您想要一个带有选项卡界面的好答案,其中每个选项卡都由用户控件支持,并且单选按钮在选项卡之间切换。 - Billy Brown

1
如果你不将它们保存在一个列表中,并将该列表保存在会话中,你将遇到很多麻烦。
Ghyath的方法是正确的,但你也应该将它们添加到一个列表中。
List<Object> Usercontrols = new List<Objects>{};
Control ctrl = Page.LoadControl("UserControlPath"); 
Usercontrols.Add(ctrl);
Session["Usercontrols"] = Usercontrols;

在每次回传时,您需要重新加载包含列表控件的 div。 编辑:我已经更正了最后一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接