2008-09-16 172 views
50

有什麼區別,官方稱謂是什麼,ASP.NET 3.5中是否有過時的術語?UserControl,WebControl,RenderedControl和CompositeControl有什麼區別?

+0

[\ [ASP.NET \]可能的重複用戶控件,服務器控件和自定義控件之間的區別是什麼?](http://stackoverflow.com/questions/994009/asp-net-what-are-用戶控件 - 服務器控件 - 用戶之間的差異) – Earlz 2010-08-27 19:45:16

+0

@Earlz:問題詢問的3個組件中的2個與此處詢問的不同。此外,這個問題要老得多。 – 2010-08-27 20:08:33

+0

@賬單啊,他們看起來像我一樣。也許合併是爲了?你也是第一個實際上給了我一個迴應的主持人:) – Earlz 2010-08-27 22:28:08

回答

47

UserControl:自定義控件,以.ascx結尾,由其他Web控件組成。它幾乎就像一個aspx網頁的小版本。它由UI(ascx)和代碼隱藏組成。通過引用DLL不能在其他項目中重用。

WebControl:託管在網頁上或用戶控件中的控件。它由一個或多個類組成,並行工作,並託管在aspx頁面或UserControl中。 WebControls沒有UI「頁面」,並且必須直接呈現其內容。它們可以通過引用它們的DLL在其他應用程序中重用。

RenderedControl:不存在。可能是WebControl的同義詞。可能表示控件直接寫入HttpResponse而不是呈現給aspx頁面。

CompositeControl:Inbetween UserControls和WebControls。它們像UserControls一樣編碼,因爲它們由其他控件組成。沒有任何用於控制合成的圖形UI,並且對CompositeControls的UI編輯的支持必須由控制設計人員編碼。合成在代碼隱藏中完成。 CompositeControls可以在WebControls等其他項目中重用。

+0

其實複合控件沒有UI--你完全依賴於用其他控件填充Controls集合。 渲染控件是一種複合控件,其中不重用其他控件,但merly覆蓋Render方法以輸出純文本(html) – 2008-09-17 20:13:10

8

你忘記了ServerControl。

在我的理解是這樣的:

  • 只有兩種不同類型的控件:用戶控件和ServerControl
  • CompositeControls是一種「先進」的用戶控件。在Scott Guthries Blog上查找更多信息。
  • 所有這些都是WebControls(因爲它們都來自System.Web.UI.Control)
  • 它們都以任何方式呈現,所以我想將它們全部視爲呈現控件。

從MSDN:

用戶控制

在ASP.NET:正在使用相同的語法的ASP.NET頁面 聲明撰寫 並且是一種服務器 控制保存爲 .ascx擴展名的文本文件。用戶控件 允許分頁和重用頁面功能爲 。在第一次請求 ,頁面框架解析 用戶控制成從System.Web.UI.UserControl派生 和 編譯該類成組件, 它重用在後續 請求的類。用戶控件易於 開發,因爲它們的頁面樣式 創作和部署沒有先前 編譯。

服務器控制

的服務器端組件 封裝的用戶界面和 相關的功能。 ASP.NET 服務器控件直接從 System.Web.UI.Control類派生,或間接從 派生。 ASP.NET服務器控件 的超集包括Web服務器控件,HTML 服務器控件和ASP.NET移動版 控件。 ASP.NET服務器控件的頁面語法在 控件的標記中包含 runat =「server」屬性。另請參閱:HTML服務器 控制,驗證服務器控件, Web服務器控件。

0

由於我還沒有足夠的聲望尚未評論,我將添加此作爲答案,但它指的是威爾的答案上面。

link你包括:

複合控件是在正確的工具,建築師複雜的部件,其中多個子控件被彙總和相互之間以及與外部世界的互動。渲染控件適合只讀聚合控件,其中輸出不包括交互式元素,如下拉式或文本框。

我相信文檔引用UserControls是通過將Render方法重寫爲Rendered Controls而創建的。因此,它不是一個單獨的類型,而是一個實現UserControl的方法;一種模式。

3

與Web窗體一樣,可以在可視化設計器中創建用戶控件,也可以使用不同於HTML的代碼編寫用戶控件。他們也可以支持執行事件。但是,由於Web用戶控件是在運行時動態編譯的,因此無法將其添加到工具箱中,並且在添加到頁面時它們由一個簡單的佔位符表示。

如果您習慣於完整的Visual Studio .NET設計時支持(包括「屬性」窗口和「設計」視圖預覽),則使Web用戶控件難以使用。在應用程序之間共享用戶控件的唯一方法是在每個應用程序中放置一個單獨的副本,如果對控件進行更改,則需要更多維護。

Web自定義控件是已編譯的代碼,這使得它們更易於使用,但創建起來更加困難。 Web自定義控件必須在代碼中進行創作。一旦創建了控件,您可以將其添加到工具箱中,並將其顯示在具有完整屬性窗口支持和ASP.NET服務器控件的所有其他設計時功能的可視化設計器中。另外,您可以在全局程序集緩存中安裝Web自定義控件的單個副本,並在應用程序之間共享,從而使維護更加輕鬆。