.net自定义控件Control、WebControl、CompositeControl
一、呈现方法
1、Control主要有以下4个方法用于呈现
//该方法为入口方法
public virtual void RenderControl (HtmlTextWriter writer)
{
this.RenderControl(writer,this.xxxAdapter);
} protected void RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
{
if (adapter != null)
{
//调用相关的适配器方法
}
else
{
this.Render(writer);
}
} protected internal virtual void Render(HtmlTextWriter writer)
{
this.RenderChildren();
} protected internal virtual void RenderChildren(HtmlTextWriter writer)
{
//呈现子控件
} /*
整个呈现顺序就是:
1.RenderControl(HtmlTextWriter writer)
2.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
3.Render(HtmlTextWriter writer)
4.RenderChildren(HtmlTextWriter writer)
*/
2、WebControl在Control的基础上增加了Style,呈现方面就是在Render(HtmlTextWriter writer) 方法中扩展了三个呈现方法,增加一个属性呈现方法。
protected override void Render(HtmlTextWriter writer)
{
this.RenderBeginTag(writer);
this.RenderContents(writer);
this.RenderEndTag(writer);
} public virtual void RenderBeginTag (HtmlTextWriter writer)
{
this.AddAttributesToRender(writer);
//呈现Tag开始标记
} protected internal virtual void RenderContents (HtmlTextWriter writer)
{
//调用Control的呈现
base.Render(writer);
} public virtual void RenderEndTag(HtmlTextWriter writer)
{
//呈现结束标记
} protected virtual void AddAttributesToRender (HtmlTextWriter writer)
{
//呈现Attribute
}
3、CompositeControl重写了WebControl的Render (HtmlTextWriterwriter),增加了设计时支持以创建子控件
protected internal override void Render(HtmlTextWriterwriter)
{
//如果在设计时,创建子控件,也就是在设计时增加友好体验
if(DesignMode)
this.EnsureChildControls();
base.Render(writer);
}
二、自定义控件常用的特性
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中注册
<configuration>
<system.web>
<pages>
<controls>
<add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>
<add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>
<add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>
</controls>
</pages>
</system.web>
</configuration>
.net自定义控件Control、WebControl、CompositeControl的更多相关文章
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl
原文:ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 第四章 组合控件开发CompositeControl 大家好,今天我们来实现一个自定义的控件,之前我们已经 ...
- ASP.NET自定义控件组件开发 第一章 待续
原文:ASP.NET自定义控件组件开发 第一章 待续 第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接 ...
- ASP.NET自定义控件组件开发 第一章 第一章:从一个简单的控件谈起
第一章:从一个简单的控件谈起 系列文章链接: ASP.NET自定义控件组件开发 第一章 待续 ASP.NET自定义控件组件开发 第一章 第二篇 接着待续 ASP.NET自定义控件组件开发 第一章 第三 ...
- WPF自定义控件的两种方式
方法A: 第一步:My自定义控件:Control 第二步:针对 “My自定义控件” 类型,编写<style>或<模板>(UI的外观完全由用户自己定义) 第三步: 使用My自定 ...
- (八)ASP.NET自定义用户控件(1)
http://blog.csdn.net/laodao1/article/details/5897366 ASP.NET自定义控件组件开发 第一章:从一个简单的控件谈起 起始开发ASP.NET自定义控 ...
- 从Knockout到Angular的架构演变
2008年第一次在WPF中使用MVVM模式之后,就一直热衷于耦合隔离.模块化与重构.UI和逻辑分离.单元测试以及后面的领域模型.谈及MVVM模式,自己也开发过一套框架,但没有长期更新和维护,所以索性就 ...
- ASP.NET服务端基本控件介绍
ASP.NET服务端基本控件介绍 大概分为三种控件: HTML控件,ASP.NET把HTML控件当成普通字符串渲染到浏览器端,不去检查正确性,无法在服务端进行处理ASP.NET服务端控件,经过ASP. ...
- C# 很少人知道的科技
本文来告诉大家在C#很少有人会发现的科技.即使是工作了好多年的老司机也不一定会知道,如果觉得我在骗你,那么请看看下面 因为C#在微软的帮助,已经从原来很简单的,到现在的很好用.在10多年,很少人知道微 ...
- jquery post 同步异步总结
最近在测试,发现有些效果不对,最后发现是post的执行顺序问题,所以研究了下,写了以下总结 1.post被请求多次,解决方法: 连接加入随机数 rand=""+Math.rando ...
随机推荐
- C/C++中的值传递,引用传递,指针传递,指针引用传递
在面试过程中,被面试官问到传值和传引用的区别,之前没有关注过这个问题,今天在网上找了一篇包含代码和图片的讲解文章,浅显易懂,遂转载备忘. 1. 值传递 void f( int p){ printf(& ...
- [Python]将Excel文件中的数据导入MySQL
Github Link 需求 现有2000+文件夹,每个文件夹下有若干excel文件,现在要将这些excel文件中的数据导入mysql. 每个excel文件的第一行是无效数据. 除了excel文件中已 ...
- PHP Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,
$html = file_get_contents("http://www.somesite.com/"); $dom = new DOMDocument(); $dom-> ...
- WebRTC互联网实时通信
muaz-khan/WebRTC-Experiment WebRTC, WebRTC and WebRTC. Everything here is all about WebRTC!! Updated ...
- PYQT实现简单的浏览器功能
主要的类 QMainWindow 提供一个有菜单条.锚接窗口(例如工具条)和一个状态条的主应用程序窗口. http://www.kuqin.com/qtdocument/qmainwindow.htm ...
- 转:nginx模块开发——handler(一)
handler模块简介 相信大家在看了前一章的模块概述以后,都对nginx的模块有了一个基本的认识.基本上作为第三方开发者最可能开发的就是三种类型的模块,即handler,filter和load-ba ...
- Vue.js 2.0 独立构建和运行时构建的区别
Vue.js 2.0 独立构建和运行时构建的区别 在使用 Vue.js 2.0 时,有独立构建(standalone)和运行时构建(runtime-only)两种版本可供选择.而在 Vue.js 1. ...
- tcp线程聊天
.ServerThread package serverclient; import java.io.BufferedReader; import java.io.InputStreamReader; ...
- Python标准库:内置函数bytes([source[, encoding[, errors]]])
返回一个新的数组对象,这个数组对象不能对数组元素进行改动.每一个元素值范围: 0 <= x < 256.bytes函数与bytearray函数主要差别是bytes函数产生的对象的元素不能改 ...
- oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?
1.情景展示 本地可以直接连接2个不同的远程数据库: 两个数据库由于网络不通,无法建立DBLINK完成数据传输: 将A库中C表的数据插入到B库中C表,如何快速实现? 2.解决方案 通过kettle ...