自定义控件开发之生命周期(一)_第1页
自定义控件开发之生命周期(一)_第2页
自定义控件开发之生命周期(一)_第3页
自定义控件开发之生命周期(一)_第4页
自定义控件开发之生命周期(一)_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

自定义控件开发自定义控件开发

一、概述:

在.net中我们会有很多功能很强大的控件,这大大满足了多数专案的需求,但在日新月异的软件世界中,往往专案的需求是千种万样的。所以为了使满足一些专案的特定功能的需求,并且能多次复用,自定义控件完全是为这一需求量身定做的,自定义控件的原则是有什么样的需求就可以做出什么样的控件。自定义控件开发

二、我们来看看几个问题

2.1:什么是自定义控件? 2.2:自定义控件需要一些什么样的周边基础知识?2.3:通过本次主题的学习,我们能达到一个什么样的水平?(希望大家在学习的时候要有一颗平常心,现在的技术日新月异,推陈出新.以致于我们初学者学习没有一点方向感,随着时间的推移将自己原本有着强烈兴趣的那颗心慢慢被磨灭掉了.在此,我以一个过来人,有着十几年开发经验的”老人”给大家提醒忠告:技术是靠一点一滴积累起来的,需要你不断的一个接着一个知识点的去学习和实践总结.”蚁毁大堤”的故事告诉我们可以用蚂蚁的精神去学习专业知识,当你日复一日的去坚持自己专业的学习和总结,总有一天你定会成为这个行业的姣姣者.最后一句:专家绝对不是短时间塑造出来的.切记,切记.)

自定义控件开发

三、我们来解析一下这几个问题

3.1:什么是自定义控件? 3.2:自定义控件需要一些什么样的周边基础知识?3.3:通过本次主题的学习,我们能达到一个什么样的水平?3.1:什么是自定义控件?

从功能的角度来讲,自定义控件实际上就是按照预定规则设计好的程序,这个程序片段是建立在有着某个特定规律的功能上.当然也有可能是通用的.是可扩展的,也是可复用的.之所以会花经历去设计自定义控件,是因为能帮我们解决项目当中重复出现的功能需求.

从技术的角度来讲的话,可以让我们更深层次的去了解.net内部的运行机制,从原来”似懂非懂”的状态有着质的提升.并大大提高我们对专业的学习兴趣.

自定义控件开发

三、我们来解析一下这几个问题

3.1:什么是自定义控件? 3.2:自定义控件需要一些什么样的周边基础知识?3.3:通过本次主题的学习,我们能达到一个什么样的水平?3.2:自定义控件需要一些什么样的周边基础知识?

自定义控件开发在.net课程里面属于高级课程,所以在学习之前必须要有一定的基础,主要是要具备.net基本运行原理,生命周期,面向对象的思想的认识,接口/抽象类的理解,事件委托等

自定义控件开发

三、我们来解析一下这几个问题

3.1:什么是自定义控件? 3.2:自定义控件需要一些什么样的周边基础知识?3.3:通过本次主题的学习,我们能达到一个什么样的水平?3.3:通过本次主题的学习,我们能达到一个什么样的水平?

我们学习目的最基本的一个目标就是要能独立开发自定义控件并将用于实际项目开发当中去.其次是通过本次主题的学习我们能更加深入的了解到.net的内部运行机制,熟悉生命周期.对.net框架的认识绝对会有一个质的提升,以增强接下来对.net学习的底气.当然也要记住,任何一门技术越深入花的时间越多,理解也会更难.我们唯有坚持不懈,勇往直前,克服重重困难,才能到达胜利的终点.

自定义控件开发

四、本次课的主题(生命周期)4.1:什么是生命周期

4.2:什么是应用程序的生命周期

4.3:什么是页面的生命周期? 4.4:什么是控件的生命周期?

自定义控件开发

4.1:什么是生命周期

世间万事万物都被认为有生命周期,通俗的理解就是一个事物从生到死的这个过程.我们把它称为生命周期.但我更愿意理解为一个事物从开始到结束的这么一个过程.是不是

.net里面的生命周期也是这么一个概念呢!答案是肯定的.所以说一个页面的产生前是开始,一个页面的产生后是结束.理解生命周期的概念并不难,难的是要理解从开始到结束的这个过程到底经历了什么..net框架的生命周期极其复杂,所以我们应该分而析之.我们现在主要将之分为三类:应用程序的生命周期,页面的生命周期,控件的生命周期.

自定义控件开发

4.1.1:什么是生命周期-图片示例

客户端向服务器端请求页面的过程自定义控件开发

4.1.2:什么是生命周期-图片示例

客户端向服务器端请求页面的过程自定义控件开发

4.1.3:什么是生命周期-图片示例

客户端向服务器端请求页面的过程自定义控件开发

4.2:什么是应用程序的生命周期

应用程序的生命周期分两个部分来解析,当用户(第一个)去请求某个网站(应用程序)页面时,往往第一次是很慢的,为什么呢?因为第一次打开时需要进行编译应用程序顶级对象(稍后再解释),然后进行缓存.这就是第一次访问慢的主因.

那么解析页面之前到底经历了什么呢?这就是我们要讲的第二部分,解析页面之前就是走的应用程序的生命周期,实际就是应用程序域的管道流程(这么多概念???),这个流程是不可能绕过的.我们举个例子,去医院看病,哪个流程是不能绕过的.

吾认为进医院大门是不能绕过的,这个一进一出和应用程序的生命周期非常相似.自定义控件开发

4.2.1:什么是应用程序的生命周期

要是这么理解的话,应用程序的生命周期是不是随着页面的请求完成而结束呢?不是这样的.我们再想想医院的例子,如果小张患有两种疾病,他看完一种病后(相当于一个页面请求完成),会不会出医院再进医院看第二种病呢!如果这样的话,他就真的病的不轻.那这和应用程序的生命周期有什么关联呢

!应用程序的生命周期是这样去定义的,当启动应用程序后,应用程序域会一直保持在那里.以供其它客户端的请求响应,不需要每次都会经历从”生到死”的过程,这是这个流程每次都会跑,只不过第一次跑的流程和非第一次跑的有些不一样.自定义控件开发

4.2.2:什么是应用程序的生命周期

注意那个ASP.NET的部分自定义控件开发

4.2.3:什么是应用程序的生命周期

这是多个人访问网站应用程序时的一个场景,所以理解这个应用程序的生命周期尤其重要.自定义控件开发

4.2.4:什么是应用程序的生命周期

这是之前所提到的第一次访问应用程序时会进行对应用程序的顶级项进行编译,然后进行缓存,以便于在后面其它客户端请求时的调用.自定义控件开发

4.2.5:什么是应用程序的生命周期

这是之前所提到的第一次访问应用程序时会进行对应用程序的顶级项进行编译,然后进行缓存,以便于在后面其它客户端请求时的调用.自定义控件开发

4.2.6:什么是应用程序的生命周期

这些选项是根据需要来进行即时编译.自定义控件开发

4.2.7:什么是应用程序的生命周期

前面我们对应用程序的生命周期有了一个大致的了解.我们接下来说说详细的流程.

自定义控件开发

4.2.8:什么是应用程序的生命周期

这些事件对于希望在引发关键请求管道事件时运行代码的网页开发人员很有用。

如果是在开发自定义模块,并且希望对发往管道的所有请求都调用该模块,则这些事件也很有用。

自定义模块实现

IHttpModule

接口。

在IIS7.0集成模式下,必须在模块的

Init

方法中注册事件处理程序

自定义控件开发

4.2.9:什么是应用程序的生命周期

自定义控件开发

4.2.10:什么是应用程序的生命周期

前面我们所讲的应用程序的管道事件都是由系统自动流转的,我们人为的代码无法干预.能有没有在进页面之前我们能自动编程,让框架执行到我们自定义的程序(模块)呢.答案是肯定的,这里有一点小技巧,如果要执行到自己的程序,必须满足框架所给出的要求,要求就是我们的功能模块必须实现某个接口,然后要某个公开的位置实现注册,让框架知道你写了程序,这样它才能执行到你的代码.那是什么接口呢!接着往下看.自定义控件开发

4.2.11:什么是应用程序的生命周期

这些事件对于希望在引发关键请求管道事件时运行代码的网页开发人员很有用。

如果是在开发自定义模块,并且希望对发往管道的所有请求都调用该模块,则这些事件也很有用。

自定义模块实现

IHttpModule

接口,必须在模块的

Init

方法中注册事件处理程序.自定义控件开发

4.2.11:什么是应用程序的生命周期

1.BeginRequest

事件发出信号表示创建任何给定的新请求。

此事件始终被引发,并且始终是请求处理期间发生的第一个事件

2.AuthenticateRequest

事件发出信号表示配置的身份验证机制已对当前请求进行了身份验证

自定义控件开发

4.2.12:什么是应用程序的生命周期

3.PostAuthenticateRequest当安全模块已建立用户标识时发生.

4.AuthorizeRequest

事件发出信号表示ASP.NET已对当前请求进行了授权

5.PostAuthorizeRequest

事件发出信号表示ASP.NET已对当前请求进行了授权

6.

ResolveRequestCache

事件在ASP.NET完成授权事件以使缓存模块从缓存中为请求提供服务后发生,从而绕过事件处理程序的执行自定义控件开发

4.2.13:什么是应用程序的生命周期

7.PostResolveRequestCache事件在ASP.NET跳过当前事件处理程序的执行并允许缓存模块满足来自缓存的请求时发生.

8.

MapRequestHandler

事件将根据所请求资源的文件扩展名,选择相应的处理程序。

处理程序可以是本机代码模块,如IIS7.0

StaticFileModule,也可以是托管代码模块.也就是说自己可以写一段代码植入进来给框架(生命周期流程中)去执行.可以去web.config文档中去注册.

自定义控件开发

4.2.14:什么是应用程序的生命周期

9.PostMapRequestHandler事件在ASP.NET已将当前请求映射到相应的事件处理程序时发生

.

10.AcquireRequestState

事件当ASP.NET获取与当前请求关联的当前状态(如会话状态)时发生

.

11.PostAcquireRequestState事件在已获得与当前请求关联的请求状态(例如会话状态)时发生

自定义控件开发

4.3:什么是页面的生命周期

ASP.NET页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤。

这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现。

了解页生命周期非常重要,因为这样做您就能在生命周期的合适阶段编写代码,以达到预期效果。 如果您要开发自定义控件,就必须熟悉页生命周期,以便正确进行控件初始化,使用视图状态数据填充控件属性以及运行控件行为代码。

控件的生命周期基于页的生命周期,但是页引发许多您需要在自定义控件中处理的事件.自定义控件开发

4.3.1:什么是页面的生命周期

一般来说,页要经历下表概述的各个阶段。

除了页生命周期阶段以外,在请求前后还存在应用程序阶段,但是这些阶段并不特定于页.也就是说不管是哪个页面都会经过这个生命周期.

生命周期的某些部分仅当页处理为回发时才出现。

对于回发,部分页回发过程中(当您使用

UpdatePanel

控件)与整页回发过程中的页生命周期是一样.

自定义控件开发

4.3.2:什么是页面的生命周期

接下来逐一介绍页面生命周期详细步骤.

页请求发生在页生命周期开始之前。

用户请求页时,ASP.NET将确定是否需要分析和编译页(从而开始页的生命周期),或者是否可以在不运行页的情况下发送页的缓存版本以进行响应.

1.页请求自定义控件开发

4.3.3:什么是页面的生命周期

在启动阶段,将设置页属性如

Request

Response。

在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack

属性。

页还设置

UICulture

属性应.

2.启动解析自定义控件开发

4.3.4:什么是页面的生命周期

页初始化期间,可以使用页中的控件,并将设置每个控件的

UniqueID

属性。

如果需要,还会向页应用于母版页和主题。

如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值

.

3.页面初始化自定义控件开发

4.3.5:什么是页面的生命周期

加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性

.

4.加载自定义控件开发

4.3.6:什么是页面的生命周期

如果请求是回发请求,则将调用控件事件处理程序。

之后,将调用所有验证程序控件的

Validate

方法,此方法将设置各个验证程序控件和页的

IsValid

属性

.

5.回发事件处理自定义控件开发

4.3.7:什么是页面的生命周期

在呈现之前,会针对该页和所有控件保存视图状态。

在呈现阶段中,页会针对每个控件调用

Render

方法,它会提供一个文本编写器,用于将控件的输出写入页的

Response

属性的

OutputStream

对象中

.

6.呈现,输出自定义控件开发

4.3.8:什么是页面的生命周期

完全呈现页并已将页发送至客户端、准备丢弃该页后,将引发

Unload

事件。

此时,将卸载页属性(如Response

Request)并执行清理

.

7.卸载自定义控件开发

4.3.9:什么是页面的生命周期

上面介绍的是页面生命周期的各个阶段,是一种文字说明.而实际的各个阶段都会有对应的行为,我们称之为生命周期页事件.在页生命周期的每个阶段中,页将引发可运行您自己的代码进行处理的事件。

对于控件事件,通过以声明方式使用特性(如

onclick)或以使用代码的方式,均可将事件处理程序绑定到事件。 页还支持自动事件连接,即ASP.NET将查找具有特定名称的方法,并在引发了特定事件时自动运行这些方法。

如果

@

Page

指令的

AutoEventWireup

特性设置为

true,页事件将自动绑定至使用命名约定

Page_事件(如Page_Load

Page_Init)的方法.

自定义控件开发

4.3.10:什么是页面的生命周期

下面列出了最常用的页生命周期事件。

除了列出的事件外还有其他事件;不过,大多数页处理方案不使用这些事件。而是主要由ASP.NET网页上的服务器控件使用,以初始化和呈现它们本身。

如果要编写自定义ASP.NET服务器控件,则需要详细了解这些事件(后面会有介绍)

.

自定义控件开发

4.3.11:什么是页面的生命周期

自定义控件开发

4.3.12:什么是页面的生命周期

1.PreInit事件自定义控件开发

4.3.13:什么是页面的生命周期

在所有控件都已初始化且已应用所有外观设置后引发。

各个控件的

Init

事件在页的

Init事件之前发生。使用该事件来读取或初始化控件属性2.Init事件自定义控件开发

4.3.14:什么是页面的生命周期

在页的初始化阶段结束时引发。

Init

InitComplete

事件之间仅发生一个操作:开启对视图状态更改的跟踪。

视图状态跟踪使控件可以保留所有以编程方式添加到

ViewState集合的值。

在开启视图状态跟踪之前,所有添加到视图状态的值都会在回发期间丢失。控件通常在引发其

Init

事件后立即开启视图状态跟踪。 使用此事件对要在下一个回发后务必保留的视图状态进行更改.3.InitComplete事件自定义控件开发

4.3.15:什么是页面的生命周期

在页为自身和所有控件加载视图状态之后以及处理

Request

实例包括的回发数据之后引发

.4.PreLoad事件自定义控件开发

4.3.16:什么是页面的生命周期

Page

对象对

Page

对象调用

OnLoad

方法,然后以递归方式对每个子控件执行相同操作,直到加载完本页和所有控件为止。

各个控件的

Load

事件在页的

Load

事件之后发生。 使用

OnLoad

事件方法来设置控件中的属性并建立数据库连接.5.Load事件自定义控件开发

4.3.17:什么是页面的生命周期

.6.控件事件自定义控件开发

4.3.18:什么是页面的生命周期

在事件处理阶段结束时引发,对需要加载页上的所有其他控件的任务使用该事件.7.LoadComplete事件自定义控件开发

4.3.19:什么是页面的生命周期

Page

对象创建呈现页所需的所有控件(包括组合控件的子控件)之后引发.(为此,Page

对象

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论