ASP.NET Server Control Design Time Support

來源:互聯網
上載者:User
asp.net|server ASP.NET Server Control Design Time Support

做過自己的 asp.net server control 了嗎?有沒有象 ASP.NET DataGrid 控制項那樣:
1。從 Toolbox 一拽出來,自動產生一堆代碼
2。right click 看屬性時,有一大堆 custom attribute
3。還能進入 template edit 模式把 toolbox 裡的 textbox 之類的東東拽到你的控制項中
4。甚至還能彈出一個自己的對話方塊來做巨複雜的配置

我花了一天時間來看如何做這些東東,雖然最後發現目前我不需要這些 features 但是還是
願意和大家分享一下,有些東東你不去看真的不知道原來如此簡單,正如同有些東西你看完
發現居然如此複雜一樣。

主要文檔: (注意 url 換行)
msdn lib: Enhancing Design-Time Support
http://msdn.microsoft.com/library/default.asp?
url=/library/en-us/cpguide/html/cpconenhancingdesign-timesupport.asp
PDC02 session 407 名字好像是 build asp.net server control 之類的。

msdn 文檔第一段裡就開門見山說:
In the .NET Framework, the work for design-time support is not delegated to a
design environment such as Visual Studio .NET but is enabled through a rich
built-in design-time architecture.

所以你要做的東東不是什麼 vs.net add-on,而是直接擴充你的控制項。

1。從 Toolbox 一拽出來,自動產生一堆代碼
  這件事情是通過在你的 server control 代碼裡加個 attribute 實現的:
  (要不怎麼說 attribute programming 呢)
     [ToolboxData("<{0}:myControl runat=server></{0}:myControl>")]
     public class myControl : System.Web.UI.WebControls.DataGrid // 隨便舉個例子
  這樣你把你的控制項拽到 webform 裡面時,它就會自動產生這些代碼樂。

2。right click 看屬性時,有一大堆 custom attribute
   比如說你的控制項裡面有個屬性是指定 xsl file 的 url,你可以這樣:
    [
    Browsable(true),
    Category("Data"),
    DefaultValue("http://myserver/myApp/myXSL.xsl"),
    Description("specify your XSL file URL"),
    Editor(typeof(System.Web.UI.Design.XslUrlEditor),
    typeof(System.Drawing.Design.UITypeEditor))
    ]
    public string MyXSLTSrc {...}
   如此這般,你就可以在屬性對話方塊的 data 組中看到你的 MyXSLTSrc 樂,
   而且你可以通過一個專門的選 xsl url 的對話方塊來指定這個值樂。

3。還能進入 template edit 模式把 toolbox 裡的 textbox 之類的東東拽到你的控制項中
   免費午餐結束了。剩下東東真的要寫代碼了。
   首先得告訴控制項你為它老人家專門作了個 designer:
   [ Designer("YourNameSpace.Design.MyControlDesigner, YourNameSpace") ]
    public class myControl : System.Web.UI.WebControls.DataGrid // 隨便舉個例子

   然後真的給它老人家做個 Designer:
   namespace YourNameSpace.Design
   {
      public class MyControlDesigner : System.Web.UI.Design.WebControls.DataGridDesigner    
      { // 由於 control 是從 DataGrid 繼承的,control designer 也就從 DataGridDesigner 繼承
      }
   }
   
   這個 designer 主要要做什麼事情呢?
   你至少要 render 出一段 html code 來,這樣在 VS.NET IDE 的 design view 裡你才能看見
   您老辛辛苦苦做的 control。
   主要通過 override 這些 methods:
   public override string GetDesignTimeHtml()
   protected override string GetEmptyDesignTimeHtml()

   比如你的控制項支援 data binding 什麼的,你可以考慮使用一些 sample data 去顯示。
   或者多做些工作真的把 page developer 指定的 data source 綁定了顯示出來。

   仔細看文檔你就會發現如何建立 edit template。做了 edit template 後你 right click 你的
   控制項就可以進入編輯模式,比如你的控制項中包含一個 content template,你就可以把 toolbox 裡
   的 asp.net textbox, checkbox 之類的東東直接 drag & drop 到裡面去樂。

4。甚至還能彈出一個自己的對話方塊來做巨複雜的配置
   要想實現這個還要多花些功夫,你必須再做一個 MyControlComponentEditor,
   public class MyControlComponentEditor : System.Web.UI.Design.WebControls.DataGridComponentEditor  
   並且告訴 myControl 它老人家請用這個 Editor:
    [Editor(typeof(MyControlComponentEditor), typeof(ComponentEditor))]
    public class myControl : System.Web.UI.WebControls.DataGrid // 隨便舉個例子

   如何通過 override methods 去具體實現,自己查文檔 8。

   休息,休息一下。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.