2011-04-07 120 views
3

如果我想动态显示或隐藏多个用户控件。使用加载用户控件的面板然后显示或隐藏面板(可见= true/false),还是在运行时使用PlaceHolder并加载(添加)或取消搁置(清除)会更好?(LoadControl ())?面板和用户控件vs动态加载用户控件

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

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

我想知道与方法a相比是否有任何好处。 ViewState问题?呈现性能问题? HTML大小问题?

谢谢

一个

+0

您知道,您可以简单地创建一个div:'

'来进行编程。 – 2011-04-07 22:38:33

回答

3

我会动态喜欢选择A.加载控件并重新创建它们在回传总是要复杂得多,而且容易出错比切换ASPX的标记控件的可见性。

我必须承认,我不明白你为什么要在Panel和Placeholder之间做出区别。主要区别仅在于面板呈现为DIV,而PlaceHolder根本没有HTML。

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

在UserControl的Page_Load中不做任何事情,但仅在控制器(页面)使其可见时执行任何操作。因此公开函数来加载它们的数据并更新ascx中的内部UpdatePanel。然后 - 在页面调用函数并使控件变为可见之后 - 让页面更新UserControl外部的UpdatePanel。

通过这种方式,usercontrols既不会被呈现,也不会被数据绑定,因此您可以直接引用它们。

让他们通过以下方式进行沟通:

  • 首页>用户控件通过功能/性能
  • 用户控件>通过活动

结论页:

  • 选项B在ViewState和HTML-Size中都没有优势。只有在您确实需要(动态内容)时才能动态创建控件!
+0

感谢您的快速回复。延迟加载是一个好主意,这将确保加载页面(和用户控件)时不会出现延迟, – Aldo 2011-04-07 22:28:14