ASP.NET組件設計學習之ASP.NET服務器控件
從繼承關系上看,ASP.NET 服務器控件的類別大致上分為4類:
ASP.NET組件設計之ASP.NET服務器控件1、用戶控件
類似page,基本上不需要編程,可以將某個aspx頁面作為復用組件使用。
ASP.NET組件設計之ASP.NET服務器控件2、LiteralControl
ASP.NET 將所有不需要服務器端處理的 HTML 元素和可讀文本編譯為該類的實例。例如,開始標記中不包含 runat="server" 屬性/值對的 HTML 元素被編譯為 LiteralControl 對象。
文本控件的行為與文本容納器一樣,這意味著可以從文本控件提取文本,并通過父服務器控件的 Controls 屬性從父服務器控件的 ControlCollection 中移除文本控件。因此,當開發(fā)從 LiteralControl 類導出的自定義控件時,確保由控件自己執(zhí)行任何所需的預處理步驟,而不是使用對 LiteralControl.Render 方法調(diào)用的調(diào)用來實現(xiàn)它們。一般都會這樣做以提高 Web 應用程序的響應時間。
LiteralControl一般不會觸發(fā)服務器端事件。
可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或服務器控件添加或移除文本控件。
ASP.NET組件設計之ASP.NET服務器控件3、HtmlControl
HTML元素的ASP.NET模型服務器端對應組件。每一個HtmlControl直接對應于特定的HTML元素(不一定是輸入元素)。
ASP.NET組件設計之ASP.NET服務器控件4、WebControl
通常的Web控件??梢岳斫鉃閷儆趶碗s的HTML元素以及服務器端處理邏輯組成的。
繼承關系:
- System.Object
- System.Web.UI.Control
- System.Web.UI.TemplateControl
- System.Web.UI.Page
- System.Web.UI.UserControl
- System.Web.UI.LiteralControl
- System.Web.UI.HtmlControl
- System.Web.UI.WebControl
通常需要程序員開發(fā)的屬于用戶控件、web控件。xxx
從WebControl繼承而來的web服務器組件,往往繼承了豐富的UI元素和控制能力。
ASP.NET服務器控件之用戶控件
1、為什么是用戶控件
現(xiàn)代人喜好偷懶,喜歡“所見即所得”以及“拖放”式的編程。在一個阿ASP.NET web項目中往往會在多個頁面中存在共用的UI,譬如header footer等,如果所有頁面的內(nèi)容都一致,往往采用包含特定的js文件來實現(xiàn),但如果這些多個頁面都需要的UI部分跟隨不同的用戶狀態(tài)等不同而會不同,這是必須采用動態(tài)邏輯處理,普通的js/html就無法滿足要求。之前asp中采用include asp文件來實現(xiàn),現(xiàn)在ASP.NET改變了包含asp文件的種種缺限而采用用戶控件來解決。
用戶控件本質(zhì)上是一個獨立的ASP.NET文件,擴展名為ascx。用戶控件通常依賴于特定的ASP.NET web項目。當使用用戶控件時,ASP.NET頁面解析器從aspx文件中動態(tài)生成一個類,將其編譯到一個特定的裝配件(臨時緩存中托管dll),并按照.net方式引用此類實例,并進行處理。
2、如何得到用戶控件
得到用戶控件,在vs中實際上僅需要:
在web項目中添加—〉用戶控件—〉輸入用戶控件名—〉在得到的空白頁面進行UI設計,并存儲。
使用時,將用戶控件拖放在web 窗體上,即可使用用戶控件。此時vs替代我們做了一下工作:
在使用用戶控件的頁面添加一個register指令。具體為:
- ﹤%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %﹥
對于頁面解釋器可解釋為:將﹤uc1: WebUserControl1 作為用戶控件來解釋,uc1為標簽前綴(類似標準web控件的asp標簽前綴),WebUserControl1作為此用戶控件的標簽,遇到這一組合就解釋為使用用戶控件實例。Src值為該用戶控件源文件所在的虛擬路徑,但不可以為絕對路徑。
3、用戶控件的實質(zhì)(ASP.NET的用戶控件的背景)
ASP.NET是編譯的,處理用戶控件同處理頁面是類似的,頁面中所有元素都是編譯成特定類被ASP.NET頁面類調(diào)用、觸發(fā)事件的。用戶控件也是通過此途徑被復用的。當處理用戶控件時,頁面框架執(zhí)行以下步驟:
解釋ascx文件,相應解釋成為一個派生于System.Web.UI.UserControl的托管類
動態(tài)編譯到自動生成的裝配件中。
以上過程僅在***次使用用戶控件時發(fā)生,以后復用此用戶控件會省略此步驟。頁面使用register指令,將會引用此類。頁面中的用戶控件會成為此類的實例。實際上用戶控件也是編寫ASP.NET類,派生于System.Web.UI.UserControl的類,頁面使用這些類如同使用ASP.NET的標準類,為以不同在于標準控件類內(nèi)置可直接實例化使用,而用戶控件需要在使用前進行類似頁面的編譯工作,編譯得到類并組裝到裝配件后可以被實例化。
4、用戶控件編程注意事項
用戶組件不可以通過new方式實例化,因為用戶控件類屬于動態(tài)生成,new的時候(這個時候應當是頁面編譯時候,用戶控件還沒有被運行使用),用戶控件類還不存在。但是可以通過Page.LoadControl(string controlname)來裝載,此時為了loadControl可以找到用戶控件,需要采用refence指令:
- ﹤%@ Refence Control=”xxx/UserControlSamples.ascx”%﹥
用戶控件可以被另外用戶控件嵌套使用,但一定要確保用戶控件引用位置正確。
用戶控件本身屬于UI,可以被緩存,通過ascx文件頂端的OutPutCache指令來確定。
用戶控件代碼中到的URL是指用戶控件存在的路徑,而不是調(diào)用用戶控件的頁面代碼的路徑,需要通過Page.ResolveUrl進行正確的解析。
ASP.NET組件設計學習之ASP.NET服務器控件的相關信息就向你介紹到這里,希望對你學習ASP.NET組件設計之ASP.NET服務器控件有所幫助。
【編輯推薦】