3

如果我想动态显示或隐藏几个用户控件。使用加载用户控件然后显示或隐藏面板(可见=真/假)的面板会更好,还是使用 PlaceHolder 并在运行时加载(添加)或卸载(清除)它们会更好(LoadControl ())?

a) 我有一个使用 AJAX UpdatePanel 的页面。该页面有 10 个面板,每个面板加载一个用户控件。在后面的代码中,我使面板可见或不可见,一次只显示一个。这个解决方案很简单,因为所有的用户控件都在页面中,很容易引用它们及其内部控件。

b) 使用 LoadControl 动态加载控件似乎有点复杂。

我想知道与方法a相比是否有任何好处。视图状态问题?渲染性能问题?HTML 大小问题?

谢谢,

一种

4

1 回答 1

3

我更喜欢选项 A。动态加载控件并在回发中重新创建它们总是比在 aspx-markup 中切换控件的可见性更加复杂和容易出错。

我必须承认,我不明白您为什么要在面板和占位符之间有所作为。主要区别仅在于 Panel 呈现为 DIV 而 PlaceHolder 根本没有 html。

如果您将所有用户控件都放在页面中但只有单个用户控件可见,则应该延迟加载您的用户控件。这意味着:

在 UserControl 的 Page_Load 中什么都不做,但只有当控制器(页面)使其可见时。因此,公开函数以加载其数据并在 ascx 中更新其内部 UpdatePanel。然后 - 在从页面调用函数并且控件可见之后 - 让页面更新 UserControl 周围的外部 UpdatePanel。

通过这种方式,用户控件在可见之前既不会被渲染也不会被数据绑定,您总是可以直接直接引用它们。

让他们通过以下方式交流:

  • 页面 > 通过功能/属性的用户控制
  • UserControl > 通过事件的页面

结论:

  • 在 ViewState 和 HTML-Size 中,选项 B 没有任何优势。仅当您真正需要时才动态创建控件(动态内容)!
于 2011-04-07T22:07:08.597 回答