您好,登錄后才能下訂單哦!
ASP.NET中怎么實現一個服務器控件,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
ASP.NET組件設計之ASP.NET服務器控件1、用戶控件
類似page,基本上不需要編程,可以將某個aspx頁面作為復用組件使用。
ASP.NET組件設計之ASP.NET服務器控件2、LiteralControl
ASP.NET 將所有不需要服務器端處理的 HTML 元素和可讀文本編譯為該類的實例。例如,開始標記中不包含 runat="server" 屬性/值對的 HTML 元素被編譯為 LiteralControl 對象。
文本控件的行為與文本容納器一樣,這意味著可以從文本控件提取文本,并通過父服務器控件的 Controls 屬性從父服務器控件的 ControlCollection 中移除文本控件。因此,當開發從 LiteralControl 類導出的自定義控件時,確保由控件自己執行任何所需的預處理步驟,而不是使用對 LiteralControl.Render 方法調用的調用來實現它們。一般都會這樣做以提高 Web 應用程序的響應時間。
LiteralControl一般不會觸發服務器端事件。
可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或服務器控件添加或移除文本控件。
ASP.NET組件設計之ASP.NET服務器控件3、HtmlControl
HTML元素的ASP.NET模型服務器端對應組件。每一個HtmlControl直接對應于特定的HTML元素(不一定是輸入元素)。
ASP.NET組件設計之ASP.NET服務器控件4、WebControl
通常的Web控件。可以理解為屬于復雜的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
通常需要程序員開發的屬于用戶控件、web控件。xxx
從WebControl繼承而來的web服務器組件,往往繼承了豐富的UI元素和控制能力。
ASP.NET服務器控件之用戶控件
1、為什么是用戶控件
現代人喜好偷懶,喜歡“所見即所得”以及“拖放”式的編程。在一個阿ASP.NET web項目中往往會在多個頁面中存在共用的UI,譬如header footer等,如果所有頁面的內容都一致,往往采用包含特定的js文件來實現,但如果這些多個頁面都需要的UI部分跟隨不同的用戶狀態等不同而會不同,這是必須采用動態邏輯處理,普通的js/html就無法滿足要求。之前asp中采用include asp文件來實現,現在ASP.NET改變了包含asp文件的種種缺限而采用用戶控件來解決。
用戶控件本質上是一個獨立的ASP.NET文件,擴展名為ascx。用戶控件通常依賴于特定的ASP.NET web項目。當使用用戶控件時,ASP.NET頁面解析器從aspx文件中動態生成一個類,將其編譯到一個特定的裝配件(臨時緩存中托管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、用戶控件的實質(ASP.NET的用戶控件的背景)
ASP.NET是編譯的,處理用戶控件同處理頁面是類似的,頁面中所有元素都是編譯成特定類被ASP.NET頁面類調用、觸發事件的。用戶控件也是通過此途徑被復用的。當處理用戶控件時,頁面框架執行以下步驟:
解釋ascx文件,相應解釋成為一個派生于System.Web.UI.UserControl的托管類
動態編譯到自動生成的裝配件中。
以上過程僅在***次使用用戶控件時發生,以后復用此用戶控件會省略此步驟。頁面使用register指令,將會引用此類。頁面中的用戶控件會成為此類的實例。實際上用戶控件也是編寫ASP.NET類,派生于System.Web.UI.UserControl的類,頁面使用這些類如同使用ASP.NET的標準類,為以不同在于標準控件類內置可直接實例化使用,而用戶控件需要在使用前進行類似頁面的編譯工作,編譯得到類并組裝到裝配件后可以被實例化。
4、用戶控件編程注意事項
用戶組件不可以通過new方式實例化,因為用戶控件類屬于動態生成,new的時候(這個時候應當是頁面編譯時候,用戶控件還沒有被運行使用),用戶控件類還不存在。但是可以通過Page.LoadControl(string controlname)來裝載,此時為了loadControl可以找到用戶控件,需要采用refence指令:
﹤%@ Refence Control=”xxx/UserControlSamples.ascx”%﹥
用戶控件可以被另外用戶控件嵌套使用,但一定要確保用戶控件引用位置正確。
用戶控件本身屬于UI,可以被緩存,通過ascx文件頂端的OutPutCache指令來確定。
用戶控件代碼中到的URL是指用戶控件存在的路徑,而不是調用用戶控件的頁面代碼的路徑,需要通過Page.ResolveUrl進行正確的解析。
看完上述內容,你們掌握ASP.NET中怎么實現一個服務器控件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。