.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 ...
随机推荐
- Mac 流程图
https://www.lucidchart.com/pages/signup?utm_expid=39895073-174.qKyHpBEbQS26y86OArD-rQ.1 https://www. ...
- iOS 动画效果。简单的提示消失
UILabel * label1 = [[UILabel alloc]initWithFrame:CGRectMake(, , , )]; label1.text = @"qingjoin& ...
- Android Studio 之 导入Eclipse项目常见问题及解决方案
在将Eclipse做的Android项目成功导入Android Studio 后,启动生成,遇到一些问题,现总结如下: 问题1:图片命名问题 AS对图片命名要求比eclipse严格,图片名称只能有&q ...
- 【树莓派】crontab设置Linux设备定时重启
简介:设置Linux设备定时重启或者关机 问题:有台设备每天总需要使用的人手动重启一下才可以正常工作,但是检查了日志,看起来服务一切都正常.时间和正确时间相差4mins. 解决办法: 1.增加定时任务 ...
- pager-taglib分页处理的使用
pager-taglib是java中一个用于分页的小的框架.下面简单介绍一下它的具体使用. 一.环境的搭建: 将pager-taglib-2.0.war包拷贝到Tomcat的webapps下.启动To ...
- VMware的存储野心(上):软件定义、分布式DAS支持
ChinaByte比特网 http://storage.chinabyte.com/291/12477791_2.shtml 11月29日(文/黄亮)- SDN(软件定义的网络,Software De ...
- poj - 1191 - 棋盘切割(dp)
题意:将一个8*8的棋盘(每一个单元正方形有个分值)沿直线(竖或横)割掉一块,留下一块,对留下的这块继续这样操作,总共进行n - 1次,得到n块(1 < n < 15)矩形,每一个矩形的分 ...
- Webwork【07】文件上传下载
Web上传和下载应该是很普遍的一个需求,无论是小型网站还是大并发访问的交易网站.WebWork 当然也提供了很友好的拦截器来实现对文件的上传,让我们可以专注与业务逻辑的设计和实现,在实现上传和下载时顺 ...
- JAVA的驼峰和下划线互转帮助类
实体类: import java.io.Serializable; import lombok.AllArgsConstructor; import lombok.Data; import lombo ...
- IF函数
语法:IF(logical_test,value_if_true,value_if_false) logical_test:表示计算结果为 TRUE 或 FALSE 的任意值或表达式 value_if ...