现在的位置: 首页 > 综合 > 正文

浅谈asp.net页面生命周期

2012年11月18日 ⁄ 综合 ⁄ 共 2278字 ⁄ 字号 评论关闭
之前在做项目时一直没太注意关于asp.net页面的生命周期,直到前天遇到了DetailsView编辑模式底下无法获取到值,后面通过请教啊不后才知道问题的原因,因此自己对此有了新的认识,知道了了解页面的运行机制在平时编写、调试代码都会有很好的帮助。asp.net页面的生命周期:
1. Page_Init();---初始化对象
2. Load ViewState;---导入Viewstate数据
3. Load Postback data;---用LoadPostData处理Postback数据
4. Page_Load();---导入对象
5. Handle control events;---具体的控件事件
6. Page_PreRender();---预先呈递对象
7. Page_Render();---呈递对象
8. Unload event;---卸载对象
9. Dispose method called---销毁对象

1.Page_Init();---初始化对象
这一过程主要是初始化包括页面本身的所有控件,每次的页面载入就会执行一次初试过程,而在这里面访问到的也是控件的初始值。还有就是可以通过OnInit()来重载初试化事件。
2. LoadViewState---导入Viewstate数据
在初试化事件后,在loadvireState事件中所有控件将获得他们的第一个属性ViewState属性,这个属性最终将被返回给服务器以判断这个页面是已经被用户访问完毕还是仍然在被用户所访问。也可重载loadvireState事件对相应的控件进行值设定。
3. Load Postback data;---用LoadPostData处理Postback数据
Postback数据也可以理解成就是服务器页面提交的表单数据,每一次表单数据的提交都会触发执行IPostBackDataHandler接口操作的控件。
4. Page_Load();---导入对象
这个过程就比较熟悉了,也是在页面的每次载入时一定会执行,但是注意和PageInit()之间的区别,所有的对象第一次被布置在DOM页面(在Asp.net中称控件树)里了并且可以通过代码或是相关的位置被引用。这样,对象就可以很容易的从客户端获得诸如宽度、高度、值、可见性等在Html中的属性值。经常会用到的Page.IsPostBack()指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问.
5. Handle control events;---具体的控件事件
这个过程执行的是相应具体控件事件,比如按钮事件..等。
6. Page_PreRender();---预先呈递对象
预先呈递对象可以改变对象并将改变保存的最后时刻.可以对控件的属性、控件树的结构等做出最后的修改,同时还不用考虑Asp.net对其作出任何改变,因为此时已经脱离了数据库调用以及viewstate更新了,也可以通过OnPreRender来重载。
7. Page_Render();---呈递对象呈递页面
所有对页面控件的修改完成后viewstate就被保存了。运用Html创建给浏览器输出的页面的时候Render事件就发生了。在Render事件过程中,页面调用其中的对象将它们呈递给Html。然后,页面就可以以Html的形式被用户的浏览器访问了。当Render事件被重载时,开发者可以编写自定义的Html代码使得原先生成的Html都无效而按照新的Html来组织页面。Render方法将一个HtmlTextWriter对象作为参数并用它将Html在浏览器上以网页的形式显示。这时仍然可以做一些修改动作,不过它们只是客户端的一些变化而已了。亦可以重载Render事件。
8. Unload event;---卸载对象
当想服务器请求一个对象的时候,就会在内存里生成一个继承页面对象,也就是页面的类,它继承自System.Web.UI.Page.
当页面对象从内存中卸载时发生,将触发该事件.

9. Dispose method called
在呈递给Html完成后,所有的对象都应被销毁。在Dispose事件中,你应该销毁所有在建立这个页面时创建的对象。这时,所有的处理已经完毕,所以销毁任何剩下的对象都是不会产生错误的,包括页面对象。你可以重载Dispose事件。

asp.net2.0生命周期方法:

方法

Constructor


Construct

TestDeviceFilter

AddParsedSubObject

DeterminePostBackMode

OnPreInit

LoadPersonalizationData

InitializeThemes

OnInit

ApplyControlSkin

ApplyPersonalization

OnInitComplete

LoadPageStateFromPersistenceMedium

LoadControlState

LoadViewState

ProcessPostData1

OnPreLoad

OnLoad

ProcessPostData2

RaiseChangedEvents

RaisePostBackEvent

OnLoadComplete

OnPreRender

OnPreRenderComplete

SavePersonalizationData

SaveControlState

SaveViewState

SavePageStateToPersistenceMedium

Render

OnUnload

第一次写这样的文章,通过自己的认识并参考了一些资料,文章粗陋,还请大家海涵指点。

抱歉!评论已关闭.