20170309 笔记 网页的生命周期



页面生命周期
第一步:初始化控件树(就是将所有的控件加载到一棵树上,方便遍历)

第二步:决定当前请求是否是回发还是第一次请求。其实就是设置了IsPostBack属性的值。然后再后续的事件中就可以直接使用IsPostBack属性的值了。

第三步:触发PreInit事件,。在所有初始化之前触发了这个事件。在这个事件中,1.初始化了“主题”2.初始化了母版页。在触发这个事件的时候,仅仅只是加载了控件树,和设置了IsPostBack属性的值

第四步:触发Init事件(注意:触发Init之前,做了遍历控件树上的每个控件,设置控件的一些属性)由于内部是使用递归实现的,所以先触发控件的Init事件,然后再触发页面Page的Init事件 。控件的Init事件在页面是Init事件
前发生【页面中的所有控件都Init完毕了页面才能Init完毕】,然后开启对视图状态(ViewState)更改的跟踪,开启后添加到ViewState中的内容在回发时才不会丢失。因为在Init事件最后才会开启对viewState的追踪所以在
Init事件之前包括Init事件中操作ViewState都没有意义,因为在后续的事件中汇放弃之前的操作结果

第五步:InitComplete事件 (这个事件是在页初始化完成后发生)InitComplete  事件在页的初始化阶段结束时调用。 在页生命周期的此阶段中,页中声明的所有控件都已初始化,但页的状态尚未填充。 您可以访问服务器控件,但其中将不包含从用户返回的信息。

第六步:在这里会执行一个LoadAllState()方法,这个方法会解析用户提交过来的隐藏域中的viewState中的内容,并将对应的状态信息设置给对于的服务器端控件。
(即:加载页面状态,解析ViewState,将请求来的ViewState解析并设置到页面的ViewState属性中)

第七步:调用了ProcessPostData方法,在该方法中做了两件事
1.获取表单提交过来的值,与Viewstate中控件的原来的值进行比较,将需要触发改变的事件的控件放到一个集合当中(还没有触发这些事件)
2.将表单中的提交过来的数据设置到控件上,这样在服务器端就可以拿到用户输入的值了。比如:this.TextBox1.Text就能获取用户在浏览器文本输入框中输入的内容。
(即:通过判断本次用户提交过来的控件中的值与ViewState中保存的上次的值进行比较,如果不一致,则把当前控件的对象放到一个单独的集合中(集合名叫_changePostDataConsumers),这个集合中的所有控件都需要触发Changed(改变事件)的事件)

第八步:触发PreLoad事件。在Page_Load事件触发前的一个事件

第九步:触发我们最熟悉的Page_Load事件,注意:这里最先触发的是页面的Page_Load事件,然后再触发页面每个控件的Load事件

第十步:又一次调用ProcessPostData方法,本次调用执行的内容与上次的一样,都是执行同样的两件事。对于第一次ProcessPostData方法没有涉及到的控件,在Page_Load事件执行完毕后,再次进行处理

第十一步:在RaiseChangedEvents事件中循环遍历_changedPostDataConsumers集合中的所有控件,依次引发每个控件的改变事件

第十二步:在RaisePostBackEvents事件中引发其他服务器段控件的其他事件,比如单击事件,验证事件.....等等

第十三步:触发LoadComplete事件,表示加载完毕了页面,同时服务器端控件的那些事件也执行完毕了。

第十四步:触发PreRender事件,循环遍历控件树中的所有控件,根据每个控件都生成对应的html代码。把服务端控件“渲染”为普通的html标签

第十五步:触发PreRenderComplete事件,“渲染”完毕

第十六步:调用SaveAllState()方法,保存ViewState其实就是吧服务器端ViewState集合中的内容写到了input隐藏域中,将来直接把该隐藏域发送到客户端即可。

第十七步:触发SaveStateComplete事件,在该事件中可以修改ViewState中的内容。但是修改后的内容也不会发送到客户端了。所以下次客户端再次提交过来的数据中不会包含在这里修改的内容。

第十八步:调用RenderControl()方法,把要发送到客户端浏览器的内容设置到响应中,在应用程序中将它发送到客户端浏览器

第十九步:调用ProcessRequestCleanup()方法,触发Unooad事件,卸载页面。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值