ASP.NET生命周期详解(转)
(1)请求页面:页请求发生在页生命周期开始之前。
(2)开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。
(3)初始化页面:页面初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。
(4)加载页面:加载期间,如果当前请求是回发请求,则将使用从视图状态和控件状态恢复的信息加载控件属性。
(5)验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。
(6)回发事件处理:如果请求是回发请求,则将调用所有事件处理程序。
(7)呈现页面:在页面呈现期间,视图状态将被保存到页面,然后页面将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。
(8)卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理。
与上面的生命周期相对应的Page类的生命周期事件如图所示。
Page类生命周期中各个事件的说明如表所示。
事 件 |
说 明 |
Init |
当服务器控件初始化时发生;初始化是控件生存期的第一步 |
InitComplete |
在页初始化完成时发生 |
PreInit |
在页初始化开始时发生 |
Load |
当服务器控件加载到Page对象中时发生 |
LoadComplete |
在页生命周期的加载阶段结束时发生 |
PreLoad |
在页Load事件之前发生 |
PreRender |
在页面加载控件对象之后、呈现之前发生 |
PreRenderComplete |
在呈现页内容之前发生 |
UnLoad |
当服务器控件从内存中卸载时发生 |
Disposed |
当从内存释放服务器控件时发生,这是服务器控件生存期的最后阶段 |
代码:
public partial class _Default : System.Web.UI.Page{protected int i = 1;protected void Page_PreInit(object sender, EventArgs e){Response.Write(i + ".PreInit:当页面初始化开始时发生");i++;Response.Write("<br>");}protected void Page_Init(object sender, EventArgs e){Response.Write(i + ".Init:当服务器空间初始化时发生");i++;Response.Write("<br>");}protected void Page_InitComplete(object sender, EventArgs e){Response.Write(i + ".InitComplete:当页初始化完成时发生");i++;Response.Write("<br>");}protected void Page_PreLoad(object sender, EventArgs e){Response.Write(i + ".PreLoad:当页load事件前发生");i++;Response.Write("<br>");}protected void Page_Load(object sender, EventArgs e){Response.Write(i + ".Load:当服务器控件加载到Page对象中时发生(加载页面时)");i++;Response.Write("<br>");//在Load和LoadComplete之间会执行控件事件.//如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。}protected void Page_LoadComplete(object sender, EventArgs e){Response.Write(i + ".LoadComplete:当页面生命周期的加载阶段结束时发生");i++;Response.Write("<br>");}protected void Page_PreRender(object sender, EventArgs e){Response.Write(i + ".PreRender:当页加载控件之后,呈现之前发生,使用该事件对页或其控件的内容进行最后更改(预呈现)");i++;Response.Write("<br>");}protected void Page_PreRenderComplete(object sender, EventArgs e){Response.Write(i + ".PreRenderComplete:呈现内容前发生.(预呈现完成)");i++;Response.Write("<br>");}protected void Page_SaveStateComplete(object sender, EventArgs e){/*网页上控件的状态信息是在 PreRenderComplete 事件后保存的。在SaveStateComplete事件之前用Trace查看页时其实在该事件前还有一个SaveState事件,只是这里无法演示.注意:SaveStateComplete 事件在将页和页上控件的视图状态和控件状态保存到持久性介质之后引发。这是在页被呈现到请求浏览器之前引发的最后一个事件。*/Response.Write(i + ".SaveStateComplete:在页已完成对页和页上控件的所有视图状态和控件状态信息的保存后发生.");i++;Response.Write("<br>");/*最后一部操作呈现:Render:它不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法Render()。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。*//*当你关闭页面的时候就会引发UnLoad(当服务器控件从内存中卸载时发生)和Disposed两事件(当从内存释放服务器控件时发生,这是服务器控件生存期的最后阶段)首先加载UnLoad事件:卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理.最后加载Disposed事件,释放资源,生命周期结束.... */}}
结果
Trace图:
ASP.NET生命周期详解(转)相关推荐
- Fragment生命周期详解
关于Fragment的生命周期,博主写过Activity与Fragment生命周期详解,基本上把Fragment的生命周期详细介绍过,但是那仅仅是创建一个Fragmnet时的生命周期,而事实上Frag ...
- Android面试之Activity生命周期详解
Activity生命周期详解 一 Activity的四种状态: Activity的生命周期中存在四种基本的状态:活动状态(Active/Runing),暂停状态(Paused),停止状态(Stoppe ...
- Fragment的懒加载与生命周期详解
提示:本文仅为笔者学习记录 Fragment的懒加载与生命周期详解 什么是懒加载 了解Fragment的生命周期 onAttach onCreate onCreateView onActivityCr ...
- vue 声明周期函数_Vue 生命周期详解
Vue 生命周期详解 Vue 生命周期流程 最开始,用户使用 new Vue() 创建根 Vue 实例,或者 Vue 实例化子组件都会调用_init方法(我们将这两种实例都称为vm): functio ...
- 01.软件项目管理与敏捷方法——敏捷项目生命周期详解笔记
01.软件项目管理与敏捷方法--敏捷项目生命周期详解笔记 00.与其说是船还不如说是熟练的航行技术保证了成功的航行.--George William Curtis 01.敏捷项目是一个按照敏捷宣言宗旨 ...
- taro生命周期详解
taro生命周期详解 taro介绍 生命周期 react的钩子函数 为兼容小程序的钩子函数 个别生命周期详解以及注意 1.render()函数 2.constructor()构造函数 3.在各个生命周 ...
- Eclipse中Maven常用命令以及Maven生命周期详解
Eclipse中maven常用的命令 在某一个maven项目右键快捷方式,然后点击Run As就可以发现几个Maven的命令: Maven Build: 这个命令用于编译Maven工程,执行命令后会在 ...
- Spring 生命周期详解
Spring 生命周期详解 一.传统JAVA bean的生命周期 使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了. 一旦bean不再被使用,则由Java自动进行垃圾回 ...
- flutter 生命周期详解
flutter 生命周期详解 简介 一.widget 生命周期 二.APP 生命周期 总结 简介 众所周知,程序是有生命周期的,那么flutter 的生命周期是什么呢? flutter 的生命周期大体 ...
最新文章
- 跳至下一个断点_基金经理:DeFi将推动以太坊在下一个上涨周期中涨至9000美元...
- java链表寻找中间节点
- solver.prototxt参数说明(二)
- 返回局部变量或临时变量的地址_C++的函数不可以返回局部变量的指针
- [译]聊聊C#中的泛型的使用
- linux网络编程之inet_pton和inet_ntop函数
- Nginx + IIS实现负载均衡 Session多站点共享
- Android中经常使用的工具类02
- Atitit. visual studio vs2003 vs2005 vs2008 VS2010 vs2012 vs2015新特性 新功能.doc
- android studio 可视化编程,Android Studio 可视化界面 (Design)和文本界面(Text)的切换...
- C++的岗位要求是什么?
- python教程app下载地址_Python爬取APP下载链接的实现方法
- 【2020-10-27】 scrapy爬虫之猎聘招聘信息爬取
- PHP fscanf
- 【操作系统作业】睡觉助教(用Java的ReentrantLock实现)
- Fcitx──小企鹅输入法
- 2021年如何加快百度对新站点的收录呢?
- etf跟普通基金有什么不同?etf和普通基金的区别
- Jira 和 Confluence 安装和使用
- 使用cocos2d-android做最简单的飞机大战
热门文章
- visualstudio开始调试不执行_攻击者是如何滥用msvsmon和Windows远程调试器的
- python补课费用_学习python阶段小总结
- mysql -ss -e_课内资源 - 基于ssm框架和mysql的网上选课系统
- python 中文字符串截取,Python实现针对含中文字符串的截取功能示例
- 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA
- mysql istransient_由于 MySQL 版本问题导入报错
- CompletableFuture源码详解之java.util.concurrent.CompletableFuture#runAsync(java.lang.Runnable)
- L1、L2正则化详解
- 正确解读free -m
- JavaScript学习笔记——JS中的变量复制、参数传递和作用域链