Asp.Net生命周期的详解

4418040-751d1edd5a72b5db.png

一.Asp.Net页面生命周期的概念

当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程序类后,ASP.NET运行时将调用处理程序的 ProcessRequest 方法来处理请求、创建页面对象。通常情况下,无需更改此方法的实现,因为它是由 Page 类提供的。接下来被创建页面对象的ProcessRequest方法使页面经历了各个阶段:初始化、加载视图状态信息和回发数据、加载页面的用户代码以及执行回发服务器端事件。之后,页面进入显示模式:收集更新的视图状态,生成 HTML 代码并随后将代码发送到输出控制台。最后,卸载页面,并认为请求处理完毕。其中页面对象ProcessRequest方法 完成的这一系列事件的处理过程就是Asp.Net页面生命周期。

二、为什么需要了解Asp.Net页面生命周期

因为了解Asp.Net页面生命周期,可以帮助开发者在生命周期的合适阶段编写程序,以达到预期的效果,另外如果你想自己开发自定义控件,就必须熟悉页面的生命周期,以便正确进行控件的初始化,使用视图状态数据填充控件的属性,以及运行任何控件行为代码。也就是说只有熟悉了从创建到最后卸载等一系列的事件,开发起来才会顺心顺手,不会出现云里雾里的感觉。

三、生命周期阶段

1、请求页面:页请求发生在页生命周期开始之前。

2、开始:在开始阶段,将设置页属性,如Request和Response。在此阶段,页还将确定请求是回发请求还是新请求,并设置IsPostBack属性。

3、初始化页面:页面初始化期间,可以使用页中的控件,并将设置每个控件的UniqueID属性。如果当前请求是回发请求,则回发数据尚未加载,并且控件属性值尚未还原为视图状态中的值。

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

5、验证:在验证期间,将调用所有验证程序控件的Validate方法,此方法将设置各个验证程序控件和页的IsValid属性。

6、回发事件处理:如果请求是回发请求,则将调用所有事件处理程序。

7、呈现页面:在页面呈现期间,视图状态将被保存到页面,然后页面将调用每个控件,以将其呈现的输出提供给页的Response属性的OutputStream。

8、卸载页面:完全呈现页、将页发送至客户端并准备丢弃时,将调用卸载。此时,将卸载页属性(如Response和Request)并执行清理。

四、生命周期的事件

1、PreInit

使用该事件来执行下列操作:

检查 IsPostBack 属性来确定是不是第一次处理该页。

创建或重新创建动态控件。

动态设置主控页。

动态设置 Theme 属性。

读取或设置配置文件属性值。

注意:

如果请求是回发请求,则控件的值尚未从视图状态还原。如果在此阶段设置控件属性,则其值可能会在下一事件中被重写。

2、Init

在所有控件都已初始化且已应用所有外观设置后引发。使用该事件来读取或初始化控件属性。

3、InitComplete

由 Page 对象引发。使用该事件来处理要求先完成所有初始化工作的任务。

4、PreLoad

如果需要在 Load 事件之前对页或控件执行处理,请使用该事件。

在 Page 引发该事件后,它会为自身和所有控件加载视图状态,然后会处理 Request 实例包括的任何回发数据。

5、Load

Page 在 Page 上调用 OnLoad 事件方法,然后以递归方式对每个子控件执行相同操作,如此循环往复,直到加载完本页和所有控件为止。

使用 OnLoad 事件方法来设置控件中的属性并建立数据库连接

6、控件事件

使用这些事件来处理特定控件事件,如 Button 控件的 Click 事件或 TextBox 控件的 TextChanged 事件。

注意:

在回发请求中,如果页包含验证程序控件,请在执行任何处理之前检查 Page 和各个验证控件的 IsValid 属性。

7、LoadComplete

对需要加载页上的所有其他控件的任务使用该事件。

8、PreRender

在该事件发生前:

Page 对象会针对每个控件和页EnsureChildControls。

设置了 DataSourceID 属性的每个数据绑定控件会调用 DataBind 方法。有关更多信息,请参见下面的数据绑定控件的数据绑定事件。

页上的每个控件都会发生 PreRender 事件。使用该事件对页或其控件的内容进行最后更改。

9、SaveStateComplete

在该事件发生前,已针对页和所有控件保存了 ViewState。将忽略此时对页或控件进行的任何更改。

使用该事件执行满足以下条件的任务:要求已经保存了视图状态,但未对控件进行任何更改。

10、Render

这不是事件;在处理的这个阶段,Page 对象会在每个控件上调用此方法。所有 ASP.NET Web 服务器控件都有一个用于写出发送给浏览器的控件标记的 Render 方法。

如果创建自定义控件,通常要重写此方法以输出控件的标记。不过,如果自定义控件只合并标准的 ASP.NET Web 服务器控件,不合并自定义标记,则不需要重写 Render 方法。有关更多信息,请参见开发自定义 ASP.NET 服务器控件。

用户控件(.ascx 文件)自动合并呈现,因此不需要在代码中显式呈现该控件。

11、Unload

该事件首先针对每个控件发生,继而针对该页发生。在控件中,使用该事件对特定控件执行最后清理,如关闭控件特定数据库连接。

对于页自身,使用该事件来执行最后清理工作,如:关闭打开的文件和数据库连接,或完成日志记录或其他请求特定任务。

注意

在卸载阶段,页及其控件已被呈现,因此无法对响应流做进一步更改。如果尝试调用方法(如 Response.Write 方法),则该页将引发异常。


4418040-ff59cd69a8bf58b4.png

我的公众号:原文

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java chain_java 8中 predicate chain的使用

java 8中 predicate chain的使用简介Predicate是一个FunctionalInterface,代表的方法需要输入一个参数,返回boolean类型。通常用在stream的filter中,表示是否满足过滤条件。boolean test(T t);基本使用我们先看下在stream的filter中怎么使用P…

前段技术学习计划

资料: 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:陈禹鲁 链接:http://www.zhihu.com/question/19809484/answer/35544452 来源:知乎 第一本,入门 《Head first HTML&…

指针的概念

在C语言中,内存单元的地址称为指针,专门用来存放地址的变量,有时对地址,指针和指针变量不区分,统称指针。(地址指针) 一般情况下,最前面的存储类型通常会省略 指针在说明的同时&…

整理一些提高C#编程性能的技巧

1、使用StringBuilder代替使用string 连接符 ""说明:String类对象是不可变的(只读),一旦创建该对象,就不能修改该对象的值。对象String对象的重新赋值,本质上是重新创建了一个String对象并将新的…

python爬知识星球付费数据_用python爬取知识星球

去年我们做过一个叫「学长问答」的社群活动,里面沉淀了大量有价值的互动信息,后来因为各种原因终止了。今天和涂腾聊起来,觉得这些信息就这么沉寂了太浪费。所以就试着用python爬取了知识星球的内容。这个过程又学习了一些新的知识&#xff0…

HTML学习(1)

1、缩写和首字母缩写<abbr><acronym> <abbr title"etcetera">etc.</abbr> <acronym title"World Wide Web">WWW</acronym> 2、块引用&#xff08;短&#xff09; <p>A: <q>B</q>C</p> 显示结…

常用的7个SQl优化技巧

作为程序员经常和数据库打交道的时候还是非常频繁的&#xff0c;掌握住一些Sql的优化技巧还是非常有必要的。下面列出一些常用的SQl优化技巧&#xff0c;感兴趣的朋友可以了解一下。1、注意通配符中Like的使用以下写法会造成全表的扫描&#xff0c;例如&#xff1a;select id,n…

toolbar java_Java ToolBar.layout方法代码示例

import org.eclipse.swt.widgets.ToolBar; //导入方法依赖的package包/类protected ToolBar createToolbar() {final ToolBar t new ToolBar(composite, SWT.FLAT | SWT.LEFT | SWT.HORIZONTAL | SWT.WRAP);final GridData d new GridData(SWT.FILL, SWT.TOP, false, false);…

Visual Studio常用的快捷键整理

微软的开发工具Visual Studio作为DoNet开发者来说是必备神器&#xff0c;该开发工具内置了很多的开发快捷键&#xff0c;熟悉了这些开发快捷键&#xff0c;对于程序员来说事半功倍&#xff0c;所以在这里整理一下&#xff0c;版本是vs2012以上&#xff0c;目前小编列出了自己觉…

win7旗舰版6l打印机咋安驱动_在w7旗舰版上怎么安装HPlaserjet6L打印机?

您好&#xff0c;感谢您选择惠普产品。首先6L产品只有并口线&#xff0c;但是现在win 7 电脑基本都没有并口&#xff0c;有可能是您使用了转接usb设备&#xff0c;但是产品在出厂的时候会对产品作测试&#xff0c;测试的结果是不建议使用转接设备或者是延长设备&#xff0c;以免…

收集一些工作中常用的经典SQL语句

作为一枚程序员来说和数据库打交道是不可避免的&#xff0c;现收集一下工作中常用的SQL语句&#xff0c;希望能给大家带来一些帮助&#xff0c;当然可能不全面&#xff0c;欢迎补充&#xff01;1、执行插入语句&#xff0c;获取自动生成的递增的ID值INSERT INTO SysRole (RoleN…

ascii modbus vc源码_MODBUS ASCII及MODBUS RTU通讯

代码片段和文件信息using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO.Ports;//串口using…

Asp.Net操作Cookie总结

一、什么是Cookie&#xff1f;Cookie是存储在客户端文件系统的文本文件或客户端浏览器对话的内存中的少量数据。它主要用来跟踪数据设置&#xff0c;例如&#xff1a;当我们要访问一个网站网页的时候&#xff0c;用户请求网页时&#xff0c;应用程序可能会首先检查此用户是否已…

java GUI怎么输入_在Swing中创建Java GUI以进行表单输入

好吧,我已经浏览了整个互联网,但却未能找到这个问题的答案,所以也许有人可以提供一些见解.我正在开发一个相对简单的Java应用程序,它将取代目前用于系统访问请求的Word文档.它旨在允许表单输入新的员工雇用信息 – 名称,所需的访问权限等.所以这是我的问题.尝试使用所有文本字段…

Net中Session的用法

一、什么是Session&#xff1f;简单来说&#xff0c;就是用户与网站服务器建立的一个连接&#xff0c;服务器分配给一个编号。当一台WWW服务器运行时&#xff0c;可能有若干用户正在浏览运行在这台服务器上的网站。当用户首次与这台WWW服务器创建连接的时候&#xff0c;它就和这…

关于Json的总结

一、什么是Json&#xff1f;JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。它是基于 JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999的一个子集。 JS…

java 整数溢出检测,Java如何处理整数下溢和溢出以及如何检查它?

How does Java handle integer underflows and overflows?Leading on from that, how would you check/test that this is occurring?解决方案If it overflows, it goes back to the minimum value and continues from there. If it underflows, it goes back to the maximum…

console 程序随系统启动及隐藏当前程序窗口

应业务需求&#xff0c;程序需要与系统启动而自动运行&#xff0c;故加入以下代码&#xff0c;保存成 .bat文件 &#xff0c;双击执行即可 reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run" /v HuazhuPushRecord /t reg_sz /d "your…

Linq用法笔记

一、什么是Linq?LINQ即Language Integrated Query(语言集成查询)&#xff0c;LINQ是集成到C#和Visual Basic.NET这些语言中用于提供查询数据能力的一个新特性。LINQ是一种用来进行数据访问的编程模型&#xff0c;Linq可以用相同的语法访问不同的数据源&#xff0c;比如xml、数…

用例图练习

转载于:https://www.cnblogs.com/fzuyzy/p/4925246.html