asp.net页面生命周期:
1.调用FrameworkInitialize()方法初始化页面,创建控件树。
2.然后正式开始页面的生命周期:
2.1 设置IsPostBack属性的值。
2.2 触发PreInit事件,在该事件中已经可以使用IsPostBack属性了,在这个事件中还不能访问ViewState
--应用母版页,应用皮肤
2.3 触发Init()事件。递归触发Init(),
//先触发页面中的每个控件的Init()事件,最后再触发页面自己的Init()事件。
--当页面的Init()事件被触发完毕后,然后调用TrackViewState()方法,
//开始ViewState跟踪,然后就可以向ViewState中写入数据了,
//但是上次ViewState中的值,现在还获取不到。
2.4调用了LoadAllState()方法,这个方法的作用就是获取用户提交过来的
//隐藏域中的值,让后解析该值,并加载到ViewState集合中,
//然后我们就可以在ViewState集合中获取数据了。
2.5调用了ProcessPostData(_requestValueCollection,true)方法。
--在这个方法中主要做了两件事:
--1>根据用户提交过来的数据,判断某个服务器端控件的数据是否发生了改变,
//如果发生了改变,则把该控件加到一个_changedPostDataConsumers集合中,
然后在后续的步骤中,会依次触发这些控件的改变事件。
--2>把那些服务器端控件提交过来的值,通过Request获取到,
//然后设置到某个控件中。比如:this.textBox1.Text=Request["textBox1"];。
//然后在后续的事件中就可以通过this.textBox1.Text来获取文本框中的值了。
2.6触发Page_PreLoad事件,页面加载事件之前的一个事件。
2.7递归触发页面的Page_Load事件,然后再触发页面上每个控件的Load事件。
2.8.第二次调用ProcessPostData(_leftOverPostData,false)方法。
//第二个参数表示是在页面加载之前调用的ProcessPostData()方法,
//还是在页面加载时候调用该方法。
2.9调用RaiseChangedEvents()方法触发元素的改变事件。
2.10调用RaisePostBackEvent()触发页面上的所有其他服务器控件的所有其他回发事件。
2.11触发Page_LoadComplete事件。
2.12触发Page_PreRender事件。
2.13触发Page_PreRenderComplete事件。
2.14调用SaveAllState()方法,保存ViewState数据。
2.15触发Page_SaveStateComplete事件。
2.16调用RenderControl()方法开始执行渲染,
//把服务器端标签生成对应的html标签。
2.17触发Page_Unload卸载页面。
Page_PreInit被触发了
Page_Init被触发了
Page_InitComplete
Page_PreLoad
Page_Load被触发了
Page_LoadComplete被触发了。
Page_PreRender被触发了。
Page_PreRenderComplete被触发了。
Page_SaveStateComplete被触发了。
Page_Unload卸载页面。
本文来自博客园,作者:NE_STOP,转载请注明原文链接:https://www.cnblogs.com/alineverstop/p/18004715