自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET自定義控件屬性淺析

開發(fā) 后端
ASP.NET自定義控件屬性淺析主要向你介紹自定義控件簡單屬性和復雜屬性,那么他們各是什么呢?讓我們關(guān)注本文章。

ASP.NET自定義控件屬性介紹自定義控件簡單屬性和復雜屬性:

主題是是ASP.NET自定義控件屬性,只當分享經(jīng)驗,希望對大家有幫助

我們根據(jù)屬性的不同表現(xiàn)形式,把其區(qū)分為簡單屬性和復雜屬性

下面來看下屬性的表現(xiàn)形式

ASP.NET自定義控件屬性之簡單屬性表現(xiàn)形式如下,

  1. ﹤asp:TextBox ID="TextBox1" Text="textbox控件" runat="server"﹥﹤/asp:TextBox﹥ 

屬性中含有子屬性,稱之為復雜對象,如Font屬性

ASP.NET自定義控件屬性之復雜屬性的表現(xiàn)形式如下,

(1)連字符的表現(xiàn)形式

  1. ﹤asp:TextBox ID="TextBox1" Text="textbox控件" runat="server" Font-Bold="True"﹥﹤/asp:TextBox﹥ 

(2)內(nèi)鑲屬性的表現(xiàn)形式,如定義樣式

  1. ﹤asp:DataList ID="DataList1" runat="server"﹥  
  2.             ﹤SelectedItemStyle /﹥  
  3.             ﹤EditItemStyle /﹥  
  4.         ﹤/asp:DataList﹥ 

(3)內(nèi)鑲集合屬性的表現(xiàn)形式,如DropDownList (先不介紹,大家可看MSDN)

  1. ﹤asp:DropDownList ID="DropDownList1" runat="server"﹥  
  2.             ﹤asp:ListItem﹥x﹤/asp:ListItem﹥  
  3.             ﹤asp:ListItem﹥xx﹤/asp:ListItem﹥  
  4.             ﹤asp:ListItem﹥xxx﹤/asp:ListItem﹥  
  5.         ﹤/asp:DropDownList﹥ 

下面得好好看

1,ASP.NET自定義控件屬性之復雜屬性基本使用方法

請看我是怎么做的,關(guān)于下面看到了一些元數(shù)據(jù),如果你不熟悉,請參考MSDN.

下面一段代碼記錄一個custom的信息.

1.1 定義枚舉

  1. using System;  
  2.  
  3. namespace CustomComponents  
  4. {  
  5.     /**//// ﹤summary﹥  
  6.     /// 職業(yè)  
  7.     /// ﹤/summary﹥  
  8.     public enum Metier  
  9.     {  
  10.         教師,程序員,作家  
  11.     }  

1.2定義復雜屬性

  1. using System;  
  2. using System.ComponentModel;  
  3.  
  4. namespace CustomComponents  
  5. {  
  6.  
  7.  
  8.     /**//// ﹤summary﹥  
  9.     /// 地址集合  
  10.     /// ﹤/summary﹥  
  11.     public class Address  
  12.     {  
  13.         private String street = null;  
  14.         private String city = null;  
  15.         private String state = null;  
  16.         private String zip = null;  
  17.  
  18.         public String Street  
  19.         {  
  20.             get 
  21.             {  
  22.                 return street;  
  23.             }  
  24.             set 
  25.             {  
  26.                 street = value;  
  27.             }  
  28.         }  
  29.  
  30.  
  31.         public String City  
  32.         {  
  33.             get 
  34.             {  
  35.                 return city;  
  36.             }  
  37.             set 
  38.             {  
  39.                 city = value;  
  40.             }  
  41.         }  
  42.  
  43.         public String State  
  44.         {  
  45.             get 
  46.             {  
  47.                 return state;  
  48.             }  
  49.             set 
  50.             {  
  51.                 state = value;  
  52.             }  
  53.         }  
  54.  
  55.         public String Zip  
  56.         {  
  57.             get 
  58.             {  
  59.                 return zip;  
  60.             }  
  61.             set 
  62.             {  
  63.                 zip = value;  
  64.             }  
  65.         }  
  66.     }  

1.3 呈現(xiàn)控件

  1. using System;  
  2. using System.ComponentModel;  
  3. using System.Web;  
  4. using System.Web.UI;  
  5.  
  6. namespace CustomComponents  
  7. {  
  8.     public class Custom: Control  
  9.     {  
  10.         private String name = null;  
  11.         Address address = new Address();  
  12.         private Metier metier;  
  13.         private int age = 0;  
  14.  
  15.         屬性#region 屬性  
  16.         [Description("年齡")]  
  17.         public int Age  
  18.         {  
  19.             get 
  20.             {  
  21.                 return age;  
  22.             }  
  23.             set 
  24.             {  
  25.                 age = value;  
  26.             }  
  27.         }  
  28.  
  29.         [Description("姓名")]  
  30.         public String Name  
  31.         {  
  32.             get 
  33.             {  
  34.                 return name;  
  35.             }  
  36.             set 
  37.             {  
  38.                 name = value;  
  39.             }  
  40.         }  
  41.  
  42.         [Description("職業(yè)")]  
  43.         public Metier CustomMetier  
  44.         {  
  45.             get 
  46.             {  
  47.                 return metier;  
  48.             }  
  49.             set 
  50.             {  
  51.                 metier = value;  
  52.             }  
  53.         }  
  54.         [Description("地址集合")]  
  55.         public Address CustomAddress  
  56.         {  
  57.             get 
  58.             {  
  59.                 return address;  
  60.             }  
  61.         }  
  62.  
  63.         #endregion  
  64.  
  65.         protected override void Render(HtmlTextWriter output)  
  66.         {  
  67.             output.Write("姓名: " + Name + "﹤br﹥");  
  68.             output.Write("年齡: " + Age + "﹤br﹥");  
  69.             output.Write("職業(yè): " + CustomMetier + "﹤br﹥");  
  70.             output.Write("具體地址: " + CustomAddress.Street + "﹤br﹥ 城市: " 
  71.                 + CustomAddress.City + "﹤br﹥ 國籍: " +  
  72.                CustomAddress.State + "﹤br﹥ 郵編: " + CustomAddress.Zip + "﹤br﹥");  
  73.         }  
  74.     }  

1.4 在ASP.NET頁面定義控件,

發(fā)現(xiàn)問題:屬性不是有效屬性,如下圖

屬性不是有效屬性 

打開后臺代碼,輸入如下代碼檢查屬性,發(fā)現(xiàn)屬性是存在的,如下圖,再打開視圖,發(fā)現(xiàn)控件能顯示屬性,***的就是不能認識屬性為有效屬性,在源視圖也無法找到這幾個屬性.

無法找到這幾個屬性 

1.5 解決1.4無法顯示有效屬性的問題,(其實以上的測試已經(jīng)實現(xiàn)復雜屬性了).

解決方法:請在Custom類中的CustomAddress中加入一個元數(shù)據(jù)(元數(shù)據(jù)的解釋請參考MSDN),如下

  1. [Description("地址集合")]  
  2. [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  
  3. public Address CustomAddress  
  4. {  
  5.     get  
  6.     {  
  7.         return address;  
  8.     }  

再次打開源視圖,發(fā)現(xiàn)編輯器已經(jīng)支持此屬性了,如下圖,這樣有點意思吧,呵呵

編輯器已經(jīng)支持此屬性 

雖然源視圖上已經(jīng)支持這個復雜屬性了,打開屬性面板,發(fā)現(xiàn)屬性面板并不支持這個復雜屬性(因為我們比較懶,不喜歡在源視圖里編輯屬性,想直接在屬性面板編輯屬性,下面就稱復雜屬性是CustomAddress),我們想要達到的效果,是讓CustomAddress屬性跟Font屬性一樣(可以折疊)顯示在面板上,如下圖

CustomAddress屬性顯示在面板 

發(fā)現(xiàn)問題:屬性面板并不支持這個復雜屬性

1.6 實現(xiàn)CustomAddress屬性折疊效果

解決方法:給Address類添加一個元數(shù)據(jù),如下

  1. [TypeConverter(typeof(ExpandableObjectConverter))]  
  2.     public class Address  
  3.     {. } 

編譯后,再次打開屬性面板,發(fā)現(xiàn)CustomAddress屬性已經(jīng)支持折疊效果,如下圖

CustomAddress屬性支持折疊效果 

試著在屬性面板編輯CustomAddress的子屬性,修改好子屬性以后然后運行頁面,發(fā)現(xiàn)子屬性修改數(shù)據(jù)后無效

發(fā)現(xiàn)問題:在屬性面板編輯復雜屬性的子屬性無效

1.7 解決屬性面板編輯復雜屬性的子屬性無效的問題

解決方法:為Address類的每個屬性加上一個元數(shù)據(jù),如下

  1. [NotifyParentProperty(true)]  
  2. public String Street  
  3. {  
  4.     get 
  5.     {  
  6.         return street;  
  7.     }  
  8.     set 
  9.     {  
  10.         street = value;  
  11.     }  

編譯后,回到原asp.net的頁面,再次在屬性面板里修改子屬性,再次運行頁面.發(fā)現(xiàn)修改后的數(shù)據(jù)生效了.

好了,以上代碼就是連字符形式的復雜屬性的實現(xiàn),我們接著繼續(xù),我們希望把CustomAddress屬性做為內(nèi)鑲屬性使用,即如下代碼的形式

  1. ﹤custom:custom id="Custom1" runat="server" name="Clingingboy" CustomMetier="教師" Age="21"﹥  
  2.  ﹤CustomAddress City="杭州" Street="不告訴你" State="中國" Zip="310000" /﹥  
  3.  ﹤/custom:custom﹥ 

發(fā)現(xiàn)問題:無法使用內(nèi)鑲屬性

1.8 實現(xiàn)內(nèi)鑲屬性

解決方法:在Custom類中給CustomAddress再加入一個元數(shù)據(jù)(第三個),如下

  1. [Description("地址集合")]  
  2. [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  
  3. [PersistenceMode(PersistenceMode.InnerProperty)]  
  4. public Address CustomAddress  
  5. {  
  6.     get 
  7.     {  
  8.         return address;  
  9.     }  

打開源視圖(請不要把原來的連字符屬性去掉),在控件內(nèi)部加入如下代碼(編輯器已經(jīng)支持此屬性了)

  1. ﹤custom:custom      
  2. CustomAddress-Zip="3100001"  CustomAddress-City="杭州1"   
  3. CustomAddress-State="中國1" CustomAddress-Street="不告訴你1" 
  4.  id="Custom1" runat="server" name="Clingingboy" CustomMetier="教師" Age="21"﹥  
  5.  ﹤CustomAddress City="杭州" Street="不告訴你" State="中國" Zip="310000" /﹥  
  6.  ﹤/custom:custom﹥ 

發(fā)現(xiàn)問題:查看屬性面板,再次修改CustomAddress子屬性,然后運行,發(fā)現(xiàn)修改后無效果,而且顯示的數(shù)據(jù)仍然是連字符屬性的數(shù)據(jù)(非內(nèi)鑲屬性的)

1.9 讓ASP.NET控件支持內(nèi)鑲屬性

解決方法:給Custom類添加元數(shù)據(jù),如下代碼

  1. [ParseChildren(true)]  
  2. public class Custom: Control  
  3. {  } 

編譯后,再次測試發(fā)現(xiàn)屬性顯示的優(yōu)先級發(fā)生了變化,在內(nèi)鑲屬性存在的時候,顯示內(nèi)鑲屬性,若其中有子屬性不存在,則顯示連字符屬性,大家可以適當更改內(nèi)鑲屬性和連字符屬性測試變化.

發(fā)現(xiàn)問題:在屬性面板改變屬性時,仍然無法使修改后的數(shù)據(jù)生效,且修改后,數(shù)據(jù)退回初始的數(shù)據(jù),并且導致內(nèi)鑲屬性消失

1.10 解決屬性面板的問題

解決方法:給Custom類再添加一個元數(shù)據(jù),如下代碼

  1. [ParseChildren(true)]  
  2. [PersistChildren(false)]  
  3. public class Custom: Control  
  4. {  } 

編譯后再次修改屬性面板的值,發(fā)現(xiàn)修改的是內(nèi)鑲屬性的數(shù)據(jù),而且這次修改后數(shù)據(jù)沒有丟失,運行后也是修改后的效果.

好了,簡單的講完了.

總結(jié)下:上面剛開始到1.3為止,其實效果已經(jīng)實現(xiàn)了,接下來都是添加元數(shù)據(jù),添加以后給我們帶來的是方便.以上解決問題的辦法全是套用元數(shù)據(jù).可能上面的元數(shù)據(jù)大家很熟悉,在MSDN里面字面解釋的也很清楚,但你去試驗過嗎?我相信這樣的試驗可以讓你明白的更加深刻.

這次講的雖然很簡單(難得我把這么簡單的東西變的這么復雜),主要是學習學習方法了但我還是希望對大家有幫助,上面如果哪里講錯了還請指出來^_^.

ASP.NET自定義控件屬性的相關(guān)內(nèi)容就向你介紹到這里,希望對你了解ASP.NET自定義控件屬性有所幫助。

【編輯推薦】

  1. ASP.NET服務器控件之捕獲回傳事件淺析
  2. ASP.NET控件開發(fā)基礎之事件處理淺析
  3. ASP.NET服務器控件之RenderContents簡介
  4. ASP.NET服務器控件之RenderContents應用示例
  5. ASP.NET控件開發(fā)基礎之RenderContents使用淺析
責任編輯:仲衡 來源: 博客園
相關(guān)推薦

2009-07-28 09:32:41

ASP.NET自定義控

2009-08-10 14:16:59

ASP.NET自定義控

2009-08-06 17:52:45

ASP.NET控件開發(fā)自定義控件

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發(fā)

2009-08-04 13:35:16

ASP.NET自定義樣

2009-07-31 10:23:09

ASP.NET源碼DateTimePic

2011-04-19 10:33:16

ASP.NET自定義控

2009-07-27 17:25:53

ASP.NET驗證控件

2009-07-29 09:34:54

IsPostBack屬ASP.NET

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2009-08-01 12:00:15

ASP.NET服務器自ASP.NET服務器ASP.NET

2010-04-30 09:32:49

ASP.NET MVC

2009-08-07 17:49:44

控件設計器

2009-08-07 15:24:16

ASP.NET模板控件

2011-05-19 10:16:27

ASP.NET

2009-08-07 11:12:58

ASP.NET控件開發(fā)

2009-08-07 16:32:52

ASP.NET控件設計時支

2009-08-04 15:20:59

ASP.NET數(shù)據(jù)驗證數(shù)據(jù)驗證控件

2009-08-07 17:59:35

控件設計器

2009-07-24 09:57:25

ASP.NET HTM
點贊
收藏

51CTO技術(shù)棧公眾號