溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET中怎么實(shí)現(xiàn)一個(gè)服務(wù)器控件

發(fā)布時(shí)間:2021-07-16 11:24:39 來源:億速云 閱讀:119 作者:Leah 欄目:編程語言

ASP.NET中怎么實(shí)現(xiàn)一個(gè)服務(wù)器控件,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

ASP.NET組件設(shè)計(jì)之ASP.NET服務(wù)器控件1、用戶控件

類似page,基本上不需要編程,可以將某個(gè)aspx頁面作為復(fù)用組件使用。

ASP.NET組件設(shè)計(jì)之ASP.NET服務(wù)器控件2、LiteralControl

ASP.NET 將所有不需要服務(wù)器端處理的 HTML 元素和可讀文本編譯為該類的實(shí)例。例如,開始標(biāo)記中不包含 runat="server" 屬性/值對(duì)的 HTML 元素被編譯為 LiteralControl 對(duì)象。

文本控件的行為與文本容納器一樣,這意味著可以從文本控件提取文本,并通過父服務(wù)器控件的 Controls 屬性從父服務(wù)器控件的 ControlCollection 中移除文本控件。因此,當(dāng)開發(fā)從 LiteralControl 類導(dǎo)出的自定義控件時(shí),確保由控件自己執(zhí)行任何所需的預(yù)處理步驟,而不是使用對(duì) LiteralControl.Render 方法調(diào)用的調(diào)用來實(shí)現(xiàn)它們。一般都會(huì)這樣做以提高 Web 應(yīng)用程序的響應(yīng)時(shí)間。

LiteralControl一般不會(huì)觸發(fā)服務(wù)器端事件。

可以以編程方式分別使用 ControlCollection.Add 或 ControlCollection.Remove 方法,從頁或服務(wù)器控件添加或移除文本控件。

ASP.NET組件設(shè)計(jì)之ASP.NET服務(wù)器控件3、HtmlControl

HTML元素的ASP.NET模型服務(wù)器端對(duì)應(yīng)組件。每一個(gè)HtmlControl直接對(duì)應(yīng)于特定的HTML元素(不一定是輸入元素)。

ASP.NET組件設(shè)計(jì)之ASP.NET服務(wù)器控件4、WebControl

通常的Web控件??梢岳斫鉃閷儆趶?fù)雜的HTML元素以及服務(wù)器端處理邏輯組成的。

繼承關(guān)系:

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服務(wù)器組件,往往繼承了豐富的UI元素和控制能力。

ASP.NET服務(wù)器控件之用戶控件

1、為什么是用戶控件

現(xiàn)代人喜好偷懶,喜歡“所見即所得”以及“拖放”式的編程。在一個(gè)阿ASP.NET web項(xiàng)目中往往會(huì)在多個(gè)頁面中存在共用的UI,譬如header footer等,如果所有頁面的內(nèi)容都一致,往往采用包含特定的js文件來實(shí)現(xiàn),但如果這些多個(gè)頁面都需要的UI部分跟隨不同的用戶狀態(tài)等不同而會(huì)不同,這是必須采用動(dòng)態(tài)邏輯處理,普通的js/html就無法滿足要求。之前asp中采用include asp文件來實(shí)現(xiàn),現(xiàn)在ASP.NET改變了包含asp文件的種種缺限而采用用戶控件來解決。

用戶控件本質(zhì)上是一個(gè)獨(dú)立的ASP.NET文件,擴(kuò)展名為ascx。用戶控件通常依賴于特定的ASP.NET web項(xiàng)目。當(dāng)使用用戶控件時(shí),ASP.NET頁面解析器從aspx文件中動(dòng)態(tài)生成一個(gè)類,將其編譯到一個(gè)特定的裝配件(臨時(shí)緩存中托管dll),并按照.net方式引用此類實(shí)例,并進(jìn)行處理。

2、如何得到用戶控件

得到用戶控件,在vs中實(shí)際上僅需要:

在web項(xiàng)目中添加—〉用戶控件—〉輸入用戶控件名—〉在得到的空白頁面進(jìn)行UI設(shè)計(jì),并存儲(chǔ)。

使用時(shí),將用戶控件拖放在web 窗體上,即可使用用戶控件。此時(shí)vs替代我們做了一下工作:

在使用用戶控件的頁面添加一個(gè)register指令。具體為:

﹤%@ Register TagPrefix="uc1" TagName="WebUserControl1" Src="WebUserControl1.ascx" %﹥

對(duì)于頁面解釋器可解釋為:將﹤uc1: WebUserControl1 作為用戶控件來解釋,uc1為標(biāo)簽前綴(類似標(biāo)準(zhǔn)web控件的asp標(biāo)簽前綴),WebUserControl1作為此用戶控件的標(biāo)簽,遇到這一組合就解釋為使用用戶控件實(shí)例。Src值為該用戶控件源文件所在的虛擬路徑,但不可以為絕對(duì)路徑。

3、用戶控件的實(shí)質(zhì)(ASP.NET的用戶控件的背景)

ASP.NET是編譯的,處理用戶控件同處理頁面是類似的,頁面中所有元素都是編譯成特定類被ASP.NET頁面類調(diào)用、觸發(fā)事件的。用戶控件也是通過此途徑被復(fù)用的。當(dāng)處理用戶控件時(shí),頁面框架執(zhí)行以下步驟:

解釋ascx文件,相應(yīng)解釋成為一個(gè)派生于System.Web.UI.UserControl的托管類

動(dòng)態(tài)編譯到自動(dòng)生成的裝配件中。

以上過程僅在***次使用用戶控件時(shí)發(fā)生,以后復(fù)用此用戶控件會(huì)省略此步驟。頁面使用register指令,將會(huì)引用此類。頁面中的用戶控件會(huì)成為此類的實(shí)例。實(shí)際上用戶控件也是編寫ASP.NET類,派生于System.Web.UI.UserControl的類,頁面使用這些類如同使用ASP.NET的標(biāo)準(zhǔn)類,為以不同在于標(biāo)準(zhǔn)控件類內(nèi)置可直接實(shí)例化使用,而用戶控件需要在使用前進(jìn)行類似頁面的編譯工作,編譯得到類并組裝到裝配件后可以被實(shí)例化。

4、用戶控件編程注意事項(xiàng)

用戶組件不可以通過new方式實(shí)例化,因?yàn)橛脩艨丶悓儆趧?dòng)態(tài)生成,new的時(shí)候(這個(gè)時(shí)候應(yīng)當(dāng)是頁面編譯時(shí)候,用戶控件還沒有被運(yùn)行使用),用戶控件類還不存在。但是可以通過Page.LoadControl(string controlname)來裝載,此時(shí)為了loadControl可以找到用戶控件,需要采用refence指令:

﹤%@ Refence Control=”xxx/UserControlSamples.ascx”%﹥

用戶控件可以被另外用戶控件嵌套使用,但一定要確保用戶控件引用位置正確。

用戶控件本身屬于UI,可以被緩存,通過ascx文件頂端的OutPutCache指令來確定。

用戶控件代碼中到的URL是指用戶控件存在的路徑,而不是調(diào)用用戶控件的頁面代碼的路徑,需要通過Page.ResolveUrl進(jìn)行正確的解析。

看完上述內(nèi)容,你們掌握ASP.NET中怎么實(shí)現(xiàn)一個(gè)服務(wù)器控件的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI