面板和用户控件与动态加载用户控件

时间:2011-04-07 21:05:00

标签: asp.net user-controls updatepanel panel loadcontrol

如果我想动态显示或隐藏多个用户控件。是否更好的方法是使用加载用户控件然后显示或隐藏面板的面板(可见=真/假)或者更好地使用PlaceHolder并在运行时加载(添加)或取消(清除)它们(LoadControl) ())?

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

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

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

谢谢,

A

1 个答案:

答案 0 :(得分:3)

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

我必须承认,我不明白你为什么要在小组和占位符之间做出改变。主要区别仅在于Panel被渲染为DIV而PlaceHolder根本没有html。

  

如果您将UserControls全部放在页面中但只能看到单个UserControl,则应该延迟加载UserControl。这意味着:

     

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

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

  

让他们以下列方式沟通:

  • Page> UserControl通过函数/属性
  • UserControl>页面通过活动
  

结论:

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