国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET Server Control Design Time Support

2024-07-10 13:04:04
字體:
供稿:網(wǎng)友
asp.net server control design time support

做過自己的 asp.net server control 了嗎?有沒有象 asp.net datagrid 控件那樣:
1。從 toolbox 一拽出來,自動(dòng)產(chǎn)生一堆代碼
2。right click 看屬性時(shí),有一大堆 custom attribute
3。還能進(jìn)入 template edit 模式把 toolbox 里的 textbox 之類的東東拽到你的控件中
4。甚至還能彈出一個(gè)自己的對話框來做巨復(fù)雜的配置

我花了一天時(shí)間來看如何做這些東東,雖然最后發(fā)現(xiàn)目前我不需要這些 features 但是還是
愿意和大家分享一下,有些東東你不去看真的不知道原來如此簡單,正如同有些東西你看完
發(fā)現(xiàn)居然如此復(fù)雜一樣。

主要文檔: (注意 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,而是直接擴(kuò)展你的控件。

1。從 toolbox 一拽出來,自動(dòng)產(chǎn)生一堆代碼
  這件事情是通過在你的 server control 代碼里加個(gè) attribute 實(shí)現(xiàn)的:
  (要不怎么說 attribute programming 呢)
     [toolboxdata("<{0}:mycontrol runat=server></{0}:mycontrol>")]
     public class mycontrol : system.web.ui.webcontrols.datagrid // 隨便舉個(gè)例子
  這樣你把你的控件拽到 webform 里面時(shí),它就會自動(dòng)生成這些代碼樂。

2。right click 看屬性時(shí),有一大堆 custom attribute
   比如說你的控件里面有個(gè)屬性是指定 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 樂,
   而且你可以通過一個(gè)專門的選 xsl url 的對話框來指定這個(gè)值樂。

3。還能進(jìn)入 template edit 模式把 toolbox 里的 textbox 之類的東東拽到你的控件中
   免費(fèi)午餐結(jié)束了。剩下東東真的要寫代碼了。
   首先得告訴控件你為它老人家專門作了個(gè) designer:
   [ designer("yournamespace.design.mycontroldesigner, yournamespace") ]
    public class mycontrol : system.web.ui.webcontrols.datagrid // 隨便舉個(gè)例子

   然后真的給它老人家做個(gè) designer:
   namespace yournamespace.design
   {
      public class mycontroldesigner : system.web.ui.design.webcontrols.datagriddesigner    
      { // 由于 control 是從 datagrid 繼承的,control designer 也就從 datagriddesigner 繼承
      }
   }
   
   這個(gè) 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 綁定了顯示出來。

   仔細(xì)看文檔你就會發(fā)現(xiàn)如何建立 edit template。做了 edit template 后你 right click 你的
   控件就可以進(jìn)入編輯模式,比如你的控件中包含一個(gè) content template,你就可以把 toolbox 里
   的 asp.net textbox, checkbox 之類的東東直接 drag & drop 到里面去樂。

4。甚至還能彈出一個(gè)自己的對話框來做巨復(fù)雜的配置
   要想實(shí)現(xiàn)這個(gè)還要多花些功夫,你必須再做一個(gè) mycontrolcomponenteditor,
   public class mycontrolcomponenteditor : system.web.ui.design.webcontrols.datagridcomponenteditor  
   并且告訴 mycontrol 它老人家請用這個(gè) editor:
    [editor(typeof(mycontrolcomponenteditor), typeof(componenteditor))]
    public class mycontrol : system.web.ui.webcontrols.datagrid // 隨便舉個(gè)例子

   如何通過 override methods 去具體實(shí)現(xiàn),自己查文檔 8。

   休息,休息一下。
菜鳥學(xué)堂:
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘孜县| 曲靖市| 张家界市| 班玛县| 板桥市| 澄江县| 镇远县| 沙河市| 长沙市| 桐乡市| 临澧县| 永吉县| 哈尔滨市| 汉源县| 阿克苏市| 隆化县| 安国市| 佛山市| 九龙城区| 安多县| 德清县| 万载县| 乳山市| 光泽县| 沾化县| 阿克苏市| 莆田市| 岳池县| 霍州市| 西华县| 宁都县| 丽水市| 龙岩市| 莆田市| 尉氏县| 勃利县| 梨树县| 南乐县| 巴里| 浦北县| 潍坊市|