.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 ...
随机推荐
- Windows7安装UBUNTU虚拟机
1.下载虚拟机:http://www.orsoon.com/Soft/12192.html 2.下载UBUNTU10.04:http://releases.ubuntu.com/lucid/ 3.安装 ...
- directive完成UI渲染后执行JS
ui-view有相应的$viewContentLoaded http://blog.csdn.net/xinshangshangxin/article/details/44700813 ng-repe ...
- Linux文件与目录操作
1:目录操作指令 cd :切换目录 pwd:显示当前目录 mkdir:创建一个新目录 rmdir:删除一个空的目录rmdir -r:删除一个非空目录 . :此层目录 .. :上层目录 -:前一个工作目 ...
- ps 如何制作动态打字图?
1.情景展示 有几句话,想以打字的形式出现,而不是干巴巴的几个字,如何实现这个有趣的效果呢? 2.解决方案 第一步:录制屏幕:将想展示的文字逐字打出来-->保存: 第二步:将录制的视频使用p ...
- 软考历程(5)——extend 与 include
软考中涉及扩展与包括关系的辨认,先不说考试的事,扩展与包括关系是UML中非经常见.非常基础的一种关系,然而我发现非常多同学都特别easy混淆,甚至软考真题中都存在题目和答案有待商榷的地方.此篇博客实属 ...
- 【DB2】监控临时表空间使用
在我们使用数据库的时候,我们都知道应用程序在DB2上运行时,会产生临时表空间,我们想要监测这些临时表空间的使用情况,可以使用以下步骤: (1)打开monitor switches 中的table监视器 ...
- VTK中的装配体(vtkAssembly)
Actors有时也会组合在一起形成层次结构,当其中的某个Actor运动时,会影响到其他Actor的位置.例如,一个机械手臂可能由上臂.前臂.手腕和末端等部分通过关节连接起来.当上臂绕着肩关节旋转时,我 ...
- python 怎么模拟加header(如User-Agent、Content-Type等等)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...
- VS编译 x64版本zlib库
编译的过程倒也不是很难.我把编译的源码和脚本及说明都放在gitee上了. 详细的可以见这里 https://gitee.com/solym/zlib-1.2.11.git 可以参考这些文章 win10 ...
- 解决input 有多少个radio绑定change事件,手动触发就会执行多少次问题
如题,相信大家都会遇到这个问题,那么为什么会触发多次呢?其实当你用jquery绑定onchange事件的时候你就无形中给每个radio绑定了事件,所以才会出现执行多少次的问题了,那么如何解决呢,其实这 ...