页面生命周期`

1、创建页面控件树(FrameworkInitialize()——>BuildControlTree(this)):
将所有的控件实例化(即new),然后把层级(父子body里面有form,form里面有panel,
panel里面有button)关系设置好,从Page类开始先创建声明、
创建头部、创建body、创建form1:所有子控件,所有子子控件
页面里面如果有C#代码,编译成方法

2、确定IsPostback属性

3、初始化阶段:PreInitInitinitComplete
初始化ID值
将所有控件的Page属性指向当前页面类

4、如果回发
加载ViewState,从表单中获得隐藏域Viewstate的内容,把它反解密出来,把viewstate数据放到控件上去,如果是ListView这些复杂控件,那么自动将数据放到页面控件树上去(将listView的数据放到页面的隐藏域中)

处理回发数据(ProcessPostData):将表单中基本数据,放到控件上去
(如文本框 因为文本框属于表单标签,直接通过表单提交到后台)
把数据进行对比,哪些控件改变了,就把此控件放到一个集合里去,
或看那些控件被点击,就把被点击的控件放到一个集合里去

5、加载Page_Load:PreLoad 就是一个时间点,一个标志
Load:开发人员可以介入的点
第二次处理回发数据:主要是为了给在PageLoad里面自己创建的控件事件触发放到集合里去
加载完成:LoadComplete

6、触发改变事件(RaiseChangedEvents):就遍历上面步骤集合让集合中所有控件的事件依次执行(因为4步骤中把所有控件的改变放到了一个集合中)
触发回发事件(页面上多个按钮,你是点击那个按钮呢?后台通过你点击按钮的name属性进行区分)

7、PreRender预渲染:最后一次操作页面的方式(渲染:把服务器端控件转换成html标签的过程)
8、保存页面状态:将当前的页面上所有控件的数据放到隐藏域中,说白了就照张遗像
9、渲染:将服务器端控件转换为html标签的过程
10、卸载:将Page类页面所有对象释放,将html标签交给HttpContext对象,然后依次执行管道中下面的步骤

原文地址:https://www.cnblogs.com/xiaoweigogo/p/7800003.html