如果我想动态显示或隐藏多个用户控件。是否更好的方法是使用加载用户控件然后显示或隐藏面板的面板(可见=真/假)或者更好地使用PlaceHolder并在运行时加载(添加)或取消(清除)它们(LoadControl) ())?
a)我有一个使用AJAX UpdatePanel的页面。该页面有10个面板,每个面板加载一个用户控件。在后面的代码中,我使一个面板可见或不可见,一次只显示一个。这个解决方案很简单,因为所有用户控件都在页面中,所以很容易引用它们及其内部控件。
b)使用LoadControl动态加载控件似乎有点复杂。
我想知道与方法a相比是否有任何好处。 ViewState问题?渲染性能问题? HTML大小问题?
谢谢,
A
答案 0 :(得分:3)
我更喜欢选项A.动态加载控件并在回发中重新创建它们总是比在aspx-markup中切换控件的可见性要复杂得多且容易出错。
我必须承认,我不明白你为什么要在小组和占位符之间做出改变。主要区别仅在于Panel被渲染为DIV而PlaceHolder根本没有html。
如果您将UserControls全部放在页面中但只能看到单个UserControl,则应该延迟加载UserControl。这意味着:
在UserControl的Page_Load中不执行任何操作,但仅在控制器(页面)使其可见时才执行任何操作。因此,公开函数以加载其数据并更新其在ascx中的内部UpdatePanel。然后 - 在从页面调用函数并使控件可见之后 - 让页面更新UserControl周围的外部UpdatePanel。
通过这种方式,用户控件在可见之前既不会被渲染也不会被数据绑定,您可以随时直接引用它们。
让他们以下列方式沟通:
结论: