溫馨提示×

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

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

ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-12-03 10:41:37 來(lái)源:億速云 閱讀:150 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.1何處繼承

自定義控件一般從以下幾個(gè)基類(此處不包含數(shù)據(jù)控件)

一.Control類(所有服務(wù)器控件的基類,算是比較底層的類,如果控件功能比較簡(jiǎn)單,要求不多,可直接繼承此類.)

二.WebControl類(標(biāo)準(zhǔn)控件的基類,繼承此類,你可以繼承其豐富的公共屬性,若標(biāo)準(zhǔn)控件中的控件沒有你需要的控件,你可以繼承此類)

三.CompositeControl 類(2.0新增的類,此類繼承自WebControl類,如果你需要制作復(fù)合控件,請(qǐng)從繼承此類開始)

四.直接從內(nèi)置控件繼承(我們知道輪子只需要發(fā)明一遍,你的需求跟內(nèi)置差不多的話,請(qǐng)考慮這么做)

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.2呈現(xiàn)控件

Control類Render方法為基本呈現(xiàn)方法,RenderContent方法是在Render方法之上的,其為控件加了一個(gè)標(biāo)簽,我認(rèn)為RenderContent方法是為WebControl類中屬性準(zhǔn)備的.基本的方法繼續(xù)深刻的去了解.

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.3與用戶交互

純粹的呈現(xiàn)控件還不夠,我們需要傳遞數(shù)據(jù),這就必然讓我們了解自定義控件事件處理

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.4接觸屬性

屬性相對(duì)而言比較簡(jiǎn)單,也比較好理解,但其又比較麻煩.當(dāng)控件屬性太多,很容易亂,因此我們又認(rèn)識(shí)了元數(shù)據(jù),把屬性進(jìn)行了分類,如下圖

ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些

為了更清晰了,把屬性分好類別,我們又用另外做法,把多種同類型的屬性,定義在一個(gè)大的屬性里面,稱之為復(fù)雜屬性,如下圖

ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些

屬性已經(jīng)夠多了,不緊如此,我們還知道屬性的每種類型可能不一樣,而在呈現(xiàn)之后都是呈現(xiàn)字符串形式,簡(jiǎn)單屬性.net已為你處理好轉(zhuǎn)換,當(dāng)你自定義復(fù)雜屬性以后,你則需要自己為你定義的復(fù)雜屬性定義一個(gè)類型轉(zhuǎn)換器

屬性還有另外一種做法,就是可以把屬性當(dāng)成集合屬性來(lái)用.可以說是特殊話的復(fù)雜控件,這樣做可以提供給一些列表控件使用(見第10篇) 屬性用途還真不少

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.5控件樣式

控件怎么能缺樣式,我們自然需要它,在此我們?cè)俅握J(rèn)識(shí)到了WebControl類.當(dāng)然也了解到了Style類及其子類
,只要你了解了其中的幾個(gè)方法你就可以自定義控件樣式了

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.6復(fù)合控件

復(fù)合控件的功能往往比較強(qiáng)大,它利用當(dāng)前已經(jīng)存在的控件進(jìn)行組裝成一個(gè)新的控件,在此過程中我們學(xué)習(xí)了在復(fù)合控件中定義事件以及定義樣式.

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)1.7視圖狀態(tài)

不得不談的一個(gè)話題

一般我們?yōu)榭丶x的屬性都以視圖狀態(tài)的形式保存,然而復(fù)雜屬性的定義和控件樣式定義則需要你了解如何自定義視圖狀態(tài)

***我們還討論了如何為控件添加客戶端功能,還有為控件定義生成器.好了,總結(jié)終于告一段落,以上寫了兩遍,***遍寫的時(shí)候保存后數(shù)據(jù)居然丟失了,痛苦啊.

下面我們分享一些小技巧,或許大家早已經(jīng)知道了,為了以后更好的學(xué)習(xí),我把命名控件全部更改為AspDemo.CustomComponents

此次下載的源碼包括1-16篇的全部的示例代碼,如果有什么錯(cuò)誤還請(qǐng)大家指出

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)補(bǔ)充:

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)補(bǔ)充一.嵌入資源的使用

1.嵌入控件圖標(biāo)

內(nèi)置控件都有自己的圖標(biāo),很多人也很喜歡為自己的控件做個(gè)圖標(biāo),那如何做呢?

ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些

我們只需要使用ToolboxBitmap元數(shù)據(jù)就可以了,你需要了解其構(gòu)造函數(shù),用法如下

namespace AspDemo.CustomComponents  {          [ToolboxBitmap(typeof(ImageControl), "Resources.Image.bmp")]     public class ImageControl : WebControl      {      }  }

注意點(diǎn):

(1)圖標(biāo)的位置位于,以你默認(rèn)命名空間為根目錄,以點(diǎn)語(yǔ)法的方式來(lái)指定圖標(biāo)位置,(即圖標(biāo)路徑為/Resources)否則的話以你控件類型命名控件為根目錄,(即圖標(biāo)路徑為CustomComponents/Resources),大家可以嘗試一下

(2)在屬性面板指明圖標(biāo)文件為嵌入的資源,如下圖

ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些

2.嵌入其他資源文件

記得以前我們做了一個(gè)控件需要一個(gè)js文件,當(dāng)需要使用這個(gè)控件的話,則也需要使用js文件,這樣給別人用的話很不方面,我們可以把js文件作為嵌入資源使用來(lái)解決這一問題.以下例子來(lái)自MSDN,這里只是讓大家知道如何使用

[assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.image1.jpg", "image/jpeg")]  [assembly: WebResource("AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.help.htm", "text/html", PerformSubstitution = true)]  namespace AspDemo.CustomComponents  {       public class ResourceLabel : Control      {          protected override void CreateChildControls()          {               // Create a new Image control.              Image _img = new Image();              //獲取資源文件引用              _img.ImageUrl = this.Page.ClientScript.GetWebResourceUrl(this.GetType(), "AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.image1.jpg");              this.Controls.Add(_img);               // Create a new Label control.              Label _lab = new Label();              _lab.Text = "A composite control using the WebResourceAttribute class.";              this.Controls.Add(_lab);               // Create a new HtmlAnchor control linking to help.htm.              HtmlAnchor a = new HtmlAnchor();              a.HRef = this.Page.ClientScript.GetWebResourceUrl(typeof(ResourceLabel), "AspDemo.CustomComponents.Resources.AspDemo.CustomComponents.ResourceLabel.help.htm");              a.InnerText = "help link";              this.Controls.Add(new LiteralControl("﹤/br﹥"));              this.Controls.Add(a);           }      }  }

注意點(diǎn):

(1)跟上面第二點(diǎn)一樣

(2)路徑為以默認(rèn)命名空間為根路徑,然后以點(diǎn)語(yǔ)法獲取文件路徑(AspDemo.CustomComponents為命名空間,Resources為文件夾,AspDemo.CustomComponents.ResourceLabel.help.htm此為文件名稱)

OK,這樣就算完成了

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)補(bǔ)充二.持久性控件狀態(tài)

下面也只給出部分代碼(來(lái)自MSDN),這方面資料我相信已經(jīng)很多了,只當(dāng)補(bǔ)充

protected override void OnInit(EventArgs e)  {      base.OnInit(e);      Page.RegisterRequiresControlState(this);  }   protected override object SaveControlState()  {       object obj = base.SaveControlState();       if (indexValue != 0)      {          if (obj != null)          {              return new Pair(obj, indexValue);          }          else         {              return (indexValue);          }      }      else     {          return obj;      }  }   protected override void LoadControlState(object state)  {      if (state != null)      {          Pair p = state as Pair;          if (p != null)          {              base.LoadControlState(p.First);              indexValue = (int)p.Second;          }          else         {              if (state is int)              {                  indexValue = (int)state;              }              else             {                  base.LoadControlState(state);              }          }      }  }

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)補(bǔ)充三.客戶端回調(diào)

ASP.NET Unleashed單獨(dú)列出了一章來(lái)講JavaScript在自定義控件中的使用,我想大家還是看書上例子吧,個(gè)人感覺很好,非常容易理解.而且學(xué)會(huì)這個(gè)的話,還可以看的懂AtlasControlToolkit里面的幾個(gè)控件,幾乎都用到了這種技術(shù).

ASP.NET控件開發(fā)基礎(chǔ)的總結(jié)補(bǔ)充四.配置文件

(1)在web.config中預(yù)先定義控件標(biāo)簽和注冊(cè)控件,從而可以在每個(gè)頁(yè)面省去
使用 @ Register 指令

﹤pages﹥    ﹤controls﹥       ﹤add tagPrefix="aspDemo" namespace="AspDemo.CustomComponents" assembly="AspDemo.CustomComponents"/﹥    ﹤/controls﹥   ﹤/pages﹥

(2)控件映射

URL可以映射,控件也可以,我們?cè)谂渲肁jax環(huán)境的時(shí)候就用到了此方法

﹤pages﹥   ﹤tagMapping﹥          ﹤add tagType="System.Web.UI.WebControls.RequiredFieldValidator" mappedTagType="System.Web.UI.Compatibility.RequiredFieldValidator, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/﹥                  ﹤/pages﹥

五.在工具欄上隱藏控件

再講一個(gè)小東西,當(dāng)定義的控件,不需要在工具欄上顯示的話,可以用此元數(shù)據(jù)把控件隱藏起來(lái)

[ToolboxItem(false)]         public class ImageControl : WebControl      {      }

好了,寫完這一篇了,如哪里有錯(cuò)誤還請(qǐng)大家指出,以上全憑經(jīng)驗(yàn)寫的。

以上是“ASP.NET控件開發(fā)基礎(chǔ)知識(shí)點(diǎn)有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(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