- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理论文章(页生命周期与自定义控件的开发)
Asp.Net 2.0 中的页生命周期与自定义用户控件开发
2007/10/25
摘要:Asp.Net2.0提供自定义用户开发的程序架构,基于该架构可以开发出满足用户特殊需求的各种可重用的控件。自定义控件的开发同样要遵循页生命周期的规律。在Asp.Net 2.0 中引入控件状态,以防止因关闭视图状态,而控件无法正常工作的现象。
关键词:ASP.Net;页生命周期(Page Life Cycle);自定义控件;控件状态(View State)
1. 引述 1
2. 自定义控件的编程模型 1
2.1. .Net自定义控件开发静态模型 1
2.2. 简单呈现自定义控件的开发 2
2.3. 复合自定义控件的开发 5
3. 自定义控件的页生命周期 8
3.1. 事件方法的调用顺序 8
3.2. 控件状态 10
3.3. 动态创建控件 13
4. 自定义控件的开发原则 14
5. 结束语 15
参考文献 15
引述
在上一篇关于页生命周期的文章中重点介绍了页生命周期的基本概念,并给出了基本的页面编程规则。本篇文章则从自定义用户控件开发的角度进一步深入阐述页生命周期的问题,并且也给出开发自定义控件的一些基本编程规则以供参考。但是本篇文章并不阐述自定义控件的所有内容,有关这方面的完整帮助参见参考文献[1]。
自定义控件的编程模型
.Net自定义控件开发静态模型
自定义控件与Web用户控件类似,是页面组件重用的一种机制,但是它不同于Web用户控件,它提供了比Web用户控件更强的设计时支持和实现与部署策略。但是自定义控件并不提供可视化的编程模型,.Net框架提供基于继承方式的编程模型。
从.Net框架提供的自定义控件的静态模型来看,主要涉及到WebControl、CompositeControl两个重要的基类,而这两个基类都派生自Control基类。WebControl主要提供编写Web自定义控件需要公共属性、方法,CompisteControl是.Net2.0中为简化复合自定义控件编程工作而提供的基类,它同时又是从WebControl派生出来的子类,并且实现了INamingContainer,ICompositeControlDesignAccessor两个接口,以方便子控件的自治地唯一命名(UniqueID),以及使复合控件设计器可以在设计时重新创建其关联控件的子控件。下图表示了主要的Web自定义控件的静态模型。
图 1 自定义控件开发的静态编程模型
如果开发的是没有用户界面的自定义控件,自定义控件类直接从Control派生即可,如果开发的具有简单界面形式,一般这种控件最后呈现为一个Html标记,则需要从WebControl派生,而如果开发的自定义控件是由已经存在的其他控件组合而成,则需要派生自CompositeControl。而在派生不同的类之后,还需要去重写一些基类方法和属性,以保证自定义控件的正常工作。下表给出了基本派生原则。
表 1 自定义控件基本派生原则
派生类 原则 需要重写的基类方法 需要重写的基类属性 Control 无界面呈现。 WebControl 呈现为单一Html标记。 RenderContents/Render TagKey.get CompositeControl 由其他控件组合而成,呈现为众多复杂的Hmtl标记。 RecreateChildControls
CreateChildControls
Render 对于其他可以重写的方法和属性则根据实际需要确定是否重写。如,对于派生自WebControl的简单自定义控件,可以重写方法“AddAttributesToRender”以增加呈现为Html标记后的标记属性(Attribute)。
简单呈现自定义控件的开发
下面定义一个类MailLink是一个呈现为电子邮件地址的简单控件的实现,它派生自WebControl基类。
代码 1 MailLink的实现代码
/// summary
/// 用于构造邮件地址的控件。
/// /summary
[DefaultProperty(Text)]
[ValidationProperty(EMail)]
[ParseChildren(true, Text)]
[System.Drawing.ToolboxBitmap(typeof(MailLink), MailLink.bmp)]
[ToolboxData({0}:MailLink runat=\server\/{0}:MailLink)]
public class MailLink : WebControl
{
private const string _default
文档评论(0)