ASP.NET页面生命周期
等了好久终于等到今天,东学一点西看一点,终于把asp.net页面生命周期弄得有些眉目了,只能说是大体上有些了解,但研究的还不深,等以后境界高了再来完善吧。


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事件。 顺序和Init()正好相反。
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卸载页面。
至此,页面生命周期依然完成。
下面上传一下我的参考资料。

浙公网安备 33010602011771号