国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 镇宁| 边坝县| 上栗县| 安西县| 黔西| 泽州县| 黄大仙区| 从江县| 洪雅县| 商南县| 万荣县| 岑溪市| 资中县| 巴马| 临泽县| 麻江县| 本溪市| 长垣县| 天祝| 堆龙德庆县| 石渠县| 普安县| 胶南市| 巩留县| 阳春市| 天津市| 宿州市| 娄底市| 利川市| 浦县| 黄浦区| 长海县| 寿宁县| 太湖县| 庆安县| 云林县| 广安市| 永丰县| 九台市| 芜湖县| 太仓市|