.net自定义控件Control、WebControl、CompositeControl

一、呈现方法

1、Control主要有以下4个方法用于呈现

 1 //该方法为入口方法2 public virtual void RenderControl (HtmlTextWriter writer)   3 {        4   this.RenderControl(writer,this.xxxAdapter);   5 }   6  7 protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)   8 {9   if (adapter != null)
10   {
11     //调用相关的适配器方法
12   }
13   else
14   {
15     this.Render(writer);
16   }
17 }
18
19 protected internal virtual void Render(HtmlTextWriter writer)
20 {
21   this.RenderChildren();
22 }
23
24 protected internal virtual void RenderChildren(HtmlTextWriter writer)
25 {
26   //呈现子控件
27 }
28
29 /*
30 整个呈现顺序就是:
31 1.RenderControl(HtmlTextWriter writer)
32 2.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
33 3.Render(HtmlTextWriter writer)
34 4.RenderChildren(HtmlTextWriter writer)
35 */

2、WebControl在Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法。

 1 protected override void Render(HtmlTextWriter writer)  2 {          3   this.RenderBeginTag(writer);  4   this.RenderContents(writer);  5   this.RenderEndTag(writer);  6 } 7  8 public virtual void RenderBeginTag  (HtmlTextWriter writer)  9 {
10   this.AddAttributesToRender(writer);
11   //呈现Tag开始标记
12 }
13
14 protected internal virtual void RenderContents  (HtmlTextWriter writer)
15 {
16   //调用Control的呈现
17   base.Render(writer);
18 }
19
20 public virtual void RenderEndTag(HtmlTextWriter writer)
21 {
22   //呈现结束标记
23 }
24
25 protected virtual void AddAttributesToRender  (HtmlTextWriter writer)
26 {
27   //呈现Attribute
28 } 

3、CompositeControl重写了WebControl的Render (HtmlTextWriterwriter),增加了设计时支持以创建子控件

1 protected internal override void Render(HtmlTextWriterwriter)
2 {
3   //如果在设计时,创建子控件,也就是在设计时增加友好体验
4   if(DesignMode)
5     this.EnsureChildControls();
6   base.Render(writer);
7 }

二、自定义控件常用的特性

1、命名控件特性
① [assembly: TagPrefix("Samples.AspNet", "myControls")]   //指定@Register指令中的tagprefix值,Samples.AspNet是命名空间

2、控件特性
① [DefaultProperty("Text")]      //打开IDE属性窗口时默认选中的属性项
② [ToolboxData("<{0}:myCustomControl runat=server></{0}:myCustomControl>")]   //从工具箱拖放控件生成的默认标记,可以加上其它想默认显示的属性

3、属性特性
① [Bindable(true)]                //设置该属性是否支持绑定
② [DefaultValue("")]              //属性的默认值(如果在IDE属性栏里输入的值与该值相同,IDE中的这个值不变黑)。显示的默认值则要在构造函数里赋值。
③ [Localizable(true)]             //属性是否支持本地化
④ [Browsable(true)]               //该项属性是否会显示在控件的“属性”窗口中
⑤ [Description("显示的文本")]     //属性的说明
⑥ [Category("Appearance")]        //属性分组的类别名称,可以是自定义的值
   Action:“操作”组
   Appearance:“外观”组
   Behavior:“行为 ”组
   Data:“数据”组
   Default:“杂项”组
   Design:“设计”组
   DragDrop:“拖放”组
   Focus:“焦点”组
   Format:“格式”组
   Key:“键盘”组
   Layout:“布局”组
   Mouse:“鼠标”组
   WindowStyle:“窗口样式”组
⑦ [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  //指定属性是否在网页的源代码中显示
    DesignerSerializationVisibility.Hidden   //在代码生成器中不生成属性代码,在aspx的源文件中将看不到此属性
    DesignerSerializationVisibility.Visible  //在代码生成器中生成属性代码
    DesignerSerializationVisibility.Content  //在代码生成器中生成的是属性内容的代码,而不是属性本身的代码。只影响aspx中的代码生成器中显示的属性。
⑧ [TypeConverter(typeof(ExpandableObjectConverter))]  //将类属性在IDE属性窗口显示出折叠
⑨ [NotifyParentProperty(true)]   //是否将属性窗口中对子属性的修改上传到对象模型,并在被修改了的子属性的控件中产生修改通知。

(枚举属性,类属性)

三、自定义控件在web.config中注册

 1 <configuration>2   <system.web>    3     <pages>4       <controls>5         <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>6         <add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>7         <add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>8       </controls>9     </pages>
10   </system.web>
11 </configuration> 

转载于:https://www.cnblogs.com/Jeely/p/11157144.html

.net自定义控件Control、WebControl、CompositeControl相关推荐

  1. 庖丁解牛ASP.NET3.5控件和组件开发技术-(1)服务器控件概述

    服务器控件概述 1.服务器控件的类型以及ASP.NET控件开发的系统基类 Control,WebControl,CompositeControl,DataBoundControl,Hierarchic ...

  2. ReportViewer 類別

    封裝用於 ReportViewer 控制項的方法和屬性. 繼承階層架構 Object   Control     WebControl       CompositeControl         M ...

  3. ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl

    第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经知道了,要开发自定义的控件一般继承三个基 类:Control,WebControl,还有一个就 ...

  4. (八)ASP.NET自定义用户控件(1)

    http://blog.csdn.net/laodao1/article/details/5897366 ASP.NET自定义控件组件开发 第一章:从一个简单的控件谈起 起始开发ASP.NET自定义控 ...

  5. jquery post 同步异步总结

    最近在测试,发现有些效果不对,最后发现是post的执行顺序问题,所以研究了下,写了以下总结 1.post被请求多次,解决方法: 连接加入随机数 rand=""+Math.rando ...

  6. ajax是操作系统吗,ajax 跟post 可以设置它是否同步执行

    当前位置:我的异常网» 操作系统 » ajax 跟post 可以设置它是否同步执行 ajax 跟post 可以设置它是否同步执行 www.myexceptions.net  网友分享于:2013-06 ...

  7. C# 很少人知道的科技

    本文来告诉大家在C#很少有人会发现的科技.即使是工作了好多年的老司机也不一定会知道,如果觉得我在骗你,那么请看看下面 因为C#在微软的帮助,已经从原来很简单的,到现在的很好用.在10多年,很少人知道微 ...

  8. html5获取当前位置的api腾讯地图,腾讯地图JavaScript API调用

    腾讯地图JavaScript API调用 1.加载地图 API 页面直接引入 https://map.qq.com/api/js?v=2.exp&key=OB4BZ-D4W3U-B7VVO-4 ...

  9. 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler...

        写自定义控件已经好久了,也有几个用得时间比较长的,但是对于"事件"一直是比较模糊,没有很详细的理解.          最近升级分页控件,由于原来使用的是VB.net(在V ...

最新文章

  1. PayPal API风格指南和设计模式
  2. 【计算理论】正则语言 ( 正则表达式原子定义 | 正则表达式递归定义 | 正则表达式语言原子定义 | 正则表达式语言结构归纳 | 正则表达式语言示例 | 根据正则表达式构造自动机 )
  3. codevs 1004 四子连棋 BFS、hash判重
  4. RabbitMq(七) Topic模式介绍及代码示例
  5. docker之快速部署gogs git
  6. Java后端开发实习记录
  7. win7 professional 英文版 改 中文
  8. Python实现PDF转TXT
  9. 基于内容的图像检索系统设计与实现-java+mysql
  10. 图片验证码识别 python_Python识别字符型图片验证码
  11. 基于微信小程序的便捷记账本家庭个人理财小程序#毕业设计
  12. html边框直线代码,网页制作学习:实现细线边框的两种方法_html
  13. Excel插入图片实现单击放大或缩小
  14. uniapp如何实现时间轴会议预约显示?
  15. KindEditor实现多图片上传
  16. 软件的「向前兼容」和「向后兼容」
  17. oracle大数据量删除方案
  18. 中国1-甲基环丙烯市场现状研究分析与发展前景预测报告(2022)
  19. 领导力专题︱如何培养与提升领导力
  20. 开源商城系统真的靠谱吗?它有哪些优缺点

热门文章

  1. VC 打开目录对话框
  2. Linux驱动如何在不同版本上快速迭代升级
  3. [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?
  4. 前端学习(3280):iterator
  5. 前端学习(3262):js高级教程(6)变量
  6. 前端学习(3242):react总结生命周期
  7. 前端学习(3222):函数式组件使用props
  8. [html] 页面中怎么嵌入Flash?有哪些方法?写出来
  9. [vue] vue怎么获取DOM节点?
  10. [js] 使用for-in语句能保证遍历对象的顺序吗?如果不能那为什么?如果可以那又如何保证?