2011-04-07 125 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