ASP.NET的页面生命周期

本文深入剖析了ASP.NET页面的初始化、加载、预渲染和卸载等关键阶段,详细介绍了每个阶段的重要事件及其作用,帮助开发者更好地理解页面的生命周期。
当ASP.NET运行库收到某个*.aspx的访问请求后,将开始这个页面的生命周期。首先,ASP.NET运行库将调用这个页面类的默认构造函数,对应的页面对象将在内存中创建,这个页面类即为*.cs代码文件中定义的类(派生于System.Web.UI.Page类)。页面对象创建后,将触发一系列的事件,这些事件的过程主要为:Init、Load和PreRend,当页面周期结束时将触发Unload事件。
【分析】
本题在ASP.NET相关的面试中出现频率很高,因为ASP.NET虽然和ASP名称相似,其内部原理却相差甚远。通过ASP.NET页面的生命周期分析,可以从整体上把握页面编程的原理,以解决实际中的页面事件问题。ASP.NET页面的生命周期中的事件及相应分析如下:
1.Init过程
该过程即为页面初始化过程,严格细分后,这个时候应该有3个事件,按触发顺序依次为PreInit、Init和InitComplete事件。其中PreInit事件在页面初始化开始时发生,这时ASP.NET框架开始分配WEB控件、确定母版页以及设置用户个性化设置等。并且所有设计时创建的控件都将使用默认值进行初始化,例如,在*.aspx文件中有控件标签编写如以下代码所示。
<asp:Label runat="server" ID="MyLb" Text=”Hello” />
这时,字符串“Hello”将被赋值给“ID”属性为“MyLb”的Label控件。不仅如此,编程者还可以在该事件的处理方法中动态地创建控件。
接着是Init事件和InitComplete事件。InitComplete事件在初始化过程完成时触发,页面中声明的所有控件都已初始化,但页面的状态(ViewState)尚未填充。
Init过程在页面初始化时发生。这个时候,编程者可以读取控件的属性(在设计模式中所设置的),但是不能读取用户设置的值。因为得到用户设置的值是在LoadPostData()事件被触发之后,但是编程者可以获取POST数据。Init过程可以区分*.aspx中的控件是否为动态控件,在此过程之前加入到控件树的控件其处理过程就和*.aspx中静态声明的一致。在页面初始化的过程中不能使用ViewState,因为此时ViewState还没加载。
2.Load过程
即页面载入过程。如果页面是回发的(即“IsPostBack==true”),那么首先将触发LoadViewState事件,ASP.NET运行库将从隐藏域(隐藏字段)中分离出ViewState并加载到所有启用了ViewState的控件。接着还将触发LoadPostBackData事件,即可实现了IPostBackDataHandler接口的控件(如TextBox)从HTTP的POST数据中得到值。
当然,如果页面是首次访问,则没有以上两个事件,Load过程同样可分为PreLoad、Load、LoadComplete这三个事件。在整个Load过程中,页面与其控件已经完全初始化,这时,编程者编写代码与WEB页面所有的部件交互是安全的。“Page_Load”方法是使用比较频繁的事件处理方法,编程者即可在方法中编写页面载入时所要执行的代码。在LoadComplete事件之前会再次尝试加载POST数据,和第一次一样,不过第一次执行时已在控件树上的控件不会受到第二次影响。
3.PreRender过程
主要包括PreRender、PreRenderComplete事件。这时,所有控件数据绑定和界面配置都已经完成,控件已经准备好将数据呈现到即将发出的HTTP响应中,并且编程者可以决定每个变量的最终值。
4.Unload过程
页面已经完成了整个呈现过程,并且这个页面对象将被销毁。这时编程者不能与输出HTTP响应进行交互,但是可以进行其他的清除工作。
说明:所有的Page类型的事件都与System.EventHandler委托类型配合工作。
为了更形象地说明页面生命周期,在VS 2008中添加新的WEB窗体到NetWeb项目,并命名为Index.aspx,在Index.aspx页面添加服务器控件标签如以下代码所示。
<asp:Label runat="server" ID="MyLb" Text="MyLb控件初始文字" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值