2009-07-13 102 views
5

我已經閱讀了這篇文章,介紹了何時在創建自定義控件時選擇Web Control vs. Control的情況,但這還不夠。我看到自定義控件從兩者都繼承,當他們都出售的東西到用戶界面。繼承自控制與Web控制

http://msdn.microsoft.com/en-us/library/yhzc935f.aspx

「如果你控制呈現的用戶界面(UI)元素或客戶端上的任何其他可見元素,您應該派生從System.Web.UI.WebControls您的控制.. ::。WebControl的(或派生類)如果控件呈現瀏覽器中不可見的元素,例如隱藏元素或元素,請從System.Web.UI .. ::。Control派生控件。來自Control並添加了與樣式相關的屬性,如Font,ForeColor和BackColor。此外,從WebControl派生的控件參與了ASP.NET的主題功能,而無需任何額外的工作。「

所以使用WebControl的唯一原因是如果你想使用他們的樣式功能?我只想用stringbuilder輸出字符串,所以我不關心那些東西。我寧願直接使用無表設計和字符串來形成我的控件呈現的HTML。

回答

2

WebControl不呈現表格或類似的東西,除非您告訴它。它所具有的是大多數用戶期望從使用UI呈現的控件的樣式特徵。

使用它並不花你太多。嘗試一下,看看它是否會給你帶來任何問題。

+0

你說的是它提供的屬性,如cssClass等? – PositiveGuy 2009-07-13 19:02:09

+0

我的控件正在從我們的CMS系統中通過我們的CMS管理系統輸入的我們的數據庫表中指定的HTML進行吐出。任何樣式都可以在HTML中已經存在,也可以在任何元素(如div)中使用我的自定義控件將此內容包裝在幕後邏輯中。所以我沒有預見到需要cssClass等,因爲我的控制會處理。因此,如果我從Control繼承,它仍然會輸出一些主要的UI組件,但不需要在運行時對它進行樣式設置。 – PositiveGuy 2009-07-13 19:07:38

+0

好的,這是有道理的,是的,我正在談論CssClass,BackColor,BorderColor等。 – 2009-07-13 19:39:48

10

控制

從Control類派生使我們的控制,利用由控制類提供的渲染方法,以及使用的ViewState的。

的WebControl

WebControl類從Control類派生的。但是,如果我們從WebControl中派生自定義控件,則可以獲得對控件的許多視覺方面的免費支持,如字體大小,CSS類,背景顏色等。

我應該派生哪一類?

當您創建一個自定義控件時,只需要很少或沒有UI,那麼您應該從Control類派生。如果您的控件確實需要廣泛的UI支持,那麼您應該從WebControl派生。

來源:http://dotnetslackers.com/articles/aspnet/ASPNETCustomControlsPart1.aspx

+0

好的,所以從「良好標準」的角度來看,唯一的真正切合實際的好處是,如果你打算使用WebControl,那麼實現你的控件的任何人都可以在該控件上使用CssClass。像font-size,background-color之類的所有其他字符都是垃圾,因爲您應該始終在代碼中使用帶有樣式和ID的.css。 – PositiveGuy 2009-07-13 19:03:24

+0

當您創建需要很少或不需要UI的自定義控件時,則應該從Control類派生。如果您的控件確實需要廣泛的UI支持,那麼您應該從WebControl派生。好吧,但我可以看到我的觀點,我想要WebControl的唯一原因是提供cssClass屬性。因此,如果您的控件正在吐出,可以說基於CMS系統的一些UI內容,並且您不需要指定cssClass(因爲您是通過您的後臺自定義服務器控件中的邏輯來完成此操作),則不要使用WebControl – PositiveGuy 2009-07-13 19:05:39

0

那麼,你有一個問題要問?我認爲MSDN文章中很好地解決了兩者之間的差異。

+0

試圖驗證除了獲取cssClass屬性之外是否還有任何其他好處使用WebControl。從Control繼承並不意味着你不會對它進行樣式設計,你可以在自定義控件方法中始終使用簡單樣式。真的,我只是沒有看到使用WebControl的好處,除非你最終需要cssClass屬性可用是我個人總結的。 – PositiveGuy 2009-07-13 19:20:54

+0

問題出在這裏,所有那些吐出來的是我剛剛讀過的MSDN文章。我明白這一點,但在這裏的陳述:「當你正在創建一個需要很少或沒有用戶界面的自定義控件,那麼你應該從Control類派生」。這意味着什麼,你是不是要渲染HTML(UI),或者他們的意思是,如果你不需要STYLES。這是該頁面上單詞的糟糕選擇。這句話讓人覺得好像你沒有渲染任何UI。他們的意思是造型。 – PositiveGuy 2009-07-13 19:24:13

+0

它繼續說:「如果您的控件呈現用戶界面(UI)元素或客戶端上的任何其他可見元素,則應該從System.Web.UI.WebControls .. ::。WebControl派生您的控件」。不對。在我的情況下,它會吐出很多UI ...但用戶不應該添加任何css類到它。 – PositiveGuy 2009-07-13 19:25:45