制作内嵌VS.NET的服务器控件

转载 2004年10月14日 16:49:00
说的很是简单,真的用起来不错。建议收藏。

制作内嵌VS.NET的服务器控件

www.itonline.gd.cn  2003-11-19



  做过自己的 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
url.gifhttp://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("url.gifhttp://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。

ASP.NET自定义服务器控件

最简单的服务器端控件开发流程简介。
  • yanwushu
  • yanwushu
  • 2014年04月08日 21:34
  • 4400

asp.net服务器控件与html服务器控件的区别

在ASP.NET开发中用到的控件可以分为三种:传统html控件(比如)、html服务器控件(比如)以及ASP.NET服务器控件(比如)。 初学ASP.NET,第一种控件相当于在客户端运行,在服务...
  • judyge
  • judyge
  • 2016年01月09日 22:44
  • 236

大概描述一下ASP.NET服务器控件的生命周期

ASP.NET服务器控件生命周期所要经历的11个阶段。(1)初始化:在此阶段中,主要完成两项工作:一、初始化在传入Web请求生命周期内所需的设置;二、跟踪视图状态。首先,页面框架通过默认方式引发Ini...
  • xuezhenjie2011
  • xuezhenjie2011
  • 2010年11月27日 10:18
  • 549

html控件、html服务器控件和web服务器控件的区别

[RT]html控件、html服务器控件和web服务器控件的区别 2009-07-13 下午 12:24 asp.net之所以现在开发方便和快捷,关键是它有一组强大的控件库,包括web服务器控件,...
  • zoohouse
  • zoohouse
  • 2011年10月27日 10:34
  • 3949

『Asp.Net 组件』Asp.Net 服务器组件 内嵌图片:自己的图片控件

将一个图片资源 内嵌到 程序集中,需要设置 文件VS属性(生成操作:签入的资源);程序集项目 AssemblyInfo.cs 中需要加入如下代码(其中 WebResource 包括 资源名称,资源类型...
  • sxl514286339
  • sxl514286339
  • 2013年10月06日 15:57
  • 1611

为服务器控件加入客户端事件处理的几种方法

服务器端的处理虽然方便,但因为每次都要PostBack,因而效率不高,很多时候需要为服务器端控件写入客户端事件处理。把各种方法总结一下:    1)在HTML代码的标签中直接写。如下        o...
  • huis
  • huis
  • 2005年08月31日 16:13
  • 1117

ASP.NET服务器控件开发

利用ASP.NET 2.0技术,创建Web自定义服务器控件并不是一件轻松的事情。因为,这需要开发人员了解并能够灵活应用多种Web开发技术,例如,CSS样式表、客户端脚本语言、.NET开发语言、服务器控...
  • huang7914
  • huang7914
  • 2008年04月25日 22:38
  • 3308

Web服务器控件和HTML控件区别

     这两天在学习ASP.NET,遇到了Web服务器控件和HTML控件。刚开始看见这两个控件的时候,感觉很相似。 所以就想到了如下问题:这两个控件有什么区别?后来又看到了HTML服务器控件...
  • u010539352
  • u010539352
  • 2014年12月10日 19:30
  • 1921

asp.net中什么时候用服务器控件,什么时候该用html控件

Asp.net开发中,控件无疑给开发人员带来了方便,大大提高了开发速度,如果纯粹的用托控件方式来开发网站,我想应该没有其他什么开发工具能够拼的过visual studio(以下简称vs)了。一个企业站...
  • lvjin110
  • lvjin110
  • 2013年08月16日 16:33
  • 2553

C#根据字符串获得服务器控件值和改变值

前台: 二泉映月 后台: protected void Button1_OnClick(object sender, EventArg...
  • sam_jet
  • sam_jet
  • 2014年03月06日 15:55
  • 1200
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:制作内嵌VS.NET的服务器控件
举报原因:
原因补充:

(最多只允许输入30个字)