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卸载页面。

 

至此,页面生命周期依然完成。

下面上传一下我的参考资料。

posted on 2017-04-30 14:35  奔游浪子  阅读(68)  评论(0)    收藏  举报

导航