<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      asp.net控件開發基礎(5)

       上一篇簡單的講了從WebControl繼承的控件(好象我講的都是簡單的,嘿嘿).本次講的更簡單,主題是是屬性,只當分享經驗,希望對大家有幫助

      我們根據屬性的不同表現形式,把其區分為簡單屬性和復雜屬性

      下面來看下屬性的表現形式

      簡單屬性表現形式如下,大家都很熟悉

      <asp:TextBox ID="TextBox1" Text="textbox控件" runat="server"></asp:TextBox>

      屬性中含有子屬性,稱之為復雜對象,如Font屬性
      復雜屬性的表現形式如下,

      (1)連字符的表現形式
      <asp:TextBox ID="TextBox1" Text="textbox控件" runat="server" Font-Bold="True"></asp:TextBox>

      (2)內鑲屬性的表現形式,如定義樣式

      <asp:DataList ID="DataList1" runat="server">
                  
      <SelectedItemStyle />
                  
      <EditItemStyle />
              
      </asp:DataList>

      (3)內鑲集合屬性的表現形式,如DropDownList (先不介紹,大家可看MSDN)
      <asp:DropDownList ID="DropDownList1" runat="server">
                  
      <asp:ListItem>x</asp:ListItem>
                  
      <asp:ListItem>xx</asp:ListItem>
                  
      <asp:ListItem>xxx</asp:ListItem>
              
      </asp:DropDownList>

      下面得好好看

      1,復雜屬性基本使用方法

      請看我是怎么做的,關于下面看到了一些元數據,如果你不熟悉,請參考MSDN.

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

      1.1 定義枚舉
      using System;

      namespace CustomComponents
      {
          
      /// <summary>
          
      /// 職業
          
      /// </summary>

          public enum Metier
          
      {
              教師,程序員,作家
          }

      }


      1.2定義復雜屬性

      using System;
      using System.ComponentModel;

      namespace CustomComponents
      {


          
      /// <summary>
          
      /// 地址集合
          
      /// </summary>

          public class Address
          
      {
              
      private String street = null;
              
      private String city = null;
              
      private String state = null;
              
      private String zip = null;

              
      public String Street
              
      {
                  
      get
                  
      {
                      
      return street;
                  }

                  
      set
                  
      {
                      street 
      = value;
                  }

              }



              
      public String City
              
      {
                  
      get
                  
      {
                      
      return city;
                  }

                  
      set
                  
      {
                      city 
      = value;
                  }

              }


              
      public String State
              
      {
                  
      get
                  
      {
                      
      return state;
                  }

                  
      set
                  
      {
                      state 
      = value;
                  }

              }


              
      public String Zip
              
      {
                  
      get
                  
      {
                      
      return zip;
                  }

                  
      set
                  
      {
                      zip 
      = value;
                  }

              }

          }

      }



      1.3 呈現控件



      1.4 在asp.net頁面定義控件,

      發現問題:
      屬性不是有效屬性,如下圖



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



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

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

              [Description("地址集合")]
              [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
              
      public Address CustomAddress
              
      {
                  
      get
                  
      {
                      
      return address;
                  }

              }

      再次打開源視圖,發現編輯器已經支持此屬性了,如下圖,這樣有點意思吧,呵呵



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



      發現問題:屬性面板并不支持這個復雜屬性

      1.6 實現CustomAddress屬性折疊效果

      解決方法:
      給Address類添加一個元數據,如下

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

      編譯后,再次打開屬性面板,發現CustomAddress屬性已經支持折疊效果,如下圖



      試著在屬性面板編輯CustomAddress的子屬性,修改好子屬性以后然后運行頁面,發現子屬性修改數據后無效

      發現問題:在屬性面板編輯復雜屬性的子屬性無效

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

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

              [NotifyParentProperty(true)]
              public String Street
              {
                  
      get
                  {
                      
      return street;
                  }

                  
      set
                  
      {
                      street 
      = value;
                  }

              }

      編譯后,回到原asp.net的頁面,再次在屬性面板里修改子屬性,再次運行頁面.發現修改后的數據生效了.

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

              <custom:custom id="Custom1" runat="server" name="Clingingboy" CustomMetier="教師" Age="21">
               
      <CustomAddress City="杭州" Street="不告訴你" State="中國" Zip="310000" />
               
      </custom:custom>

      發現問題:無法使用內鑲屬性

      1.8 實現內鑲屬性

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

              [Description("地址集合")]
              [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
              [PersistenceMode(PersistenceMode.InnerProperty)]
              public Address CustomAddress
              {
                  
      get
                  {
                      
      return address;
                  }

              }

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

              <custom:custom    
              CustomAddress
      -Zip="3100001"  CustomAddress-City="杭州1" 
              CustomAddress
      -State="中國1" CustomAddress-Street="不告訴你1"
               id
      ="Custom1" runat="server" name="Clingingboy" CustomMetier="教師" Age="21">
               
      <CustomAddress City="杭州" Street="不告訴你" State="中國" Zip="310000" />
               
      </custom:custom>

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

      1.9 讓控件支持內鑲屬性

      解決方法:
      給Custom類添加元數據,如下代碼

          [ParseChildren(true)]
          
      public class Custom: Control
          
       }

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

      發現問題:在屬性面板改變屬性時,仍然無法使修改后的數據生效,且修改后,數據退回初始的數據,并且導致內鑲屬性消失

      1.10 解決屬性面板的問題

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

          [ParseChildren(true)]
          [PersistChildren(
      false)]
          
      public class Custom: Control
          
       }

      編譯后再次修改屬性面板的值,發現修改的是內鑲屬性的數據,而且這次修改后數據沒有丟失,運行后也是修改后的效果.

      好了,簡單的講完了.

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

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

      示例代碼下載(請大家多修改):


      參考文章:

      ASP.NET 2.0服務器控件開發之簡單屬性

      ASP.NET 2.0服務器控件開發之復雜屬性
      posted @ 2008-10-23 17:40  影烏  閱讀(147)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 东京热一区二区三区在线| 国产在线永久视频| 深田えいみ禁欲后被隔壁人妻| 久久国内精品自在自线91| 二区中文字幕在线观看| 欧洲精品免费一区二区三区| 中文字幕午夜福利片午夜福利片97| 国产精品一在线观看| 亚洲性一交一乱一伦视频| 亚洲人午夜精品射精日韩| 日韩加勒比一本无码精品| 亚洲国产亚洲综合在线尤物| 无码国产精品一区二区免费3p| 性做久久久久久久久| 办公室强奷漂亮少妇视频| 国产精品一二三入口播放| 蜜桃视频网站| 亚洲日本欧美日韩中文字幕| 亚洲中国精品精华液| 亚洲一区二区| 亚洲精品天堂在线观看| 日韩美a一级毛片| 国产综合久久久久鬼色| 天堂v亚洲国产v第一次| 亚洲黄色一级片在线观看| 无码精品国产va在线观看dvd| 国产av一区二区亚洲精品| 青青国产揄拍视频| 宝坻区| 免费A级毛片无码A∨蜜芽试看 | 一区二区在线欧美日韩中文| 国产一区在线播放av| 亚洲欧洲一区二区综合精品| 天堂俺去俺来也www色官网| 麻豆一区二区三区香蕉视频| 国产免费高清69式视频在线观看| 亚洲免费的福利片| 国产一区二区不卡在线| 亚洲日韩AV秘 无码一区二区| 公与淑婷厨房猛烈进出视频免费| 国产精品一区二区中文|