2011-01-24 69 views
4

你好,我正在學習如何在asp.net中創建動態用戶控件。asp.net中的動態用戶控件

我只知道這種類型的控件是在運行時創建或加載的。

有人知道關於這個話題的好教程嗎?

在此先感謝,

回答

4

通常什麼人在這裏講的是動態實例和另外一個控制佔位符。

例如

Control ControlInstance = LoadControl("MyControl.ascx"); 
myPlaceholder.Controls.Add(ControlInstance); 

上述實例MyControl.ascx並把它與myPlaceholder的ID的佔位符的內部。

6

你可以學習有關ASP.Net webforms中動態控件的最佳方法是如何避免它們。在asp.net中的動態控件充滿了陷阱。我幾乎總是推薦以下其中一種替代方法:

  • 將合理的固定數量的控件放在頁面上,然後只顯示您需要的控件。
  • 找出動態控件的源並將其抽象爲可綁定到中繼器的數據源(數組,ienumerable,list等),即使它只是對Enumerable.Range()的調用。
  • 建立一個用戶控件,輸出你想要的html,繞過這個內容的整個「控件」隱喻。

如果你真的必須動態控制的工作,是要保持HTTP的無狀態特性考慮,與asp.net page life cycle一起是非常重要的。每個添加它自己的皺紋使動態控制工作:前者,你需要創建或重新創建控件,每次你做回發,後者,你需要這樣做之前點擊頁面加載事件 - 通常在頁面init或pre-init。

1

我同意@Joel知道頁面生命週期,無狀態的性質等等,這是可以避免的陷阱。需要注意的主要的事情,我不得不這樣做,主要有:

  1. Page_Init - 初始化是在頁面上這裏,因爲他們是你呈現在頁面上一次的控制。這是非常重要的,因爲ViewState在Init之後運行,並且需要使用與以前渲染方式相同的方法。您可以使用來自@Mitchel的代碼加載控件,即

    Control ControlInstance = LoadControl(「MyControl.ascx」); myPlaceholder.Controls.Add(ControlInstance);

  2. Page_Load - 將控件的內容加載到這裏,就像使用任何未動態加載的控件一樣。如果您在page_init中保留了對它們的引用,則它們將在此處可用。

保持這種結構我沒有太多的困難,因爲這似乎是ASP的方式。NET的設計工作,即使MSDN上的所有示例都不這樣做。然後你必須注意的最重要的事情是跟蹤你的頁面在你已經渲染的控件方面的狀態。

在我的情況下,它是採取多頁調查的部分編號,並從數據庫中重新加載問題,所以我所要做的就是跟蹤當前渲染的節號,這並不困難。

說了這麼多,如果你使用動態控件只是爲了顯示和隱藏同一屏幕的不同視圖,那麼我建議你不要使用它們。在這種情況下,我更願意使用用戶控件(隱藏不適當的用戶控件),佔位符來標記尚未呈現的區域,或者分開頁面/視圖等,以便讓頁面承擔單一責任這使得更容易調試和/或從用戶獲得關於他們在哪個頁面上的有用信息。

0

微軟的文章非常好,但我已經讀過的最好的文章是在波紋管鏈接:

http://www.4guysfromrolla.com/articles/092904-1.aspx

如果您在ASP.NET Web窗體動態控件非常感興趣,我建議您學習DotNetNuke CMS Portal。 DotNetNuke是使用動態控件作爲使用ASP.NET門戶構建動態門戶和頁面的核心功能的最佳案例之一。它可以在www.dotnetnuke.com免費下載。我希望它有幫助