关于Page带母版页等加载的顺序那些事

WebForm的一堆事件挺让人头疼,常常搞混这些事件的顺序。如何在适当的事件阶段设置一些属性或执行某种操作,所以归纳下:

原文:

http://www.betterbuilt.com/testload.aspx

图:

咋一看可能有点晕乎(作者把用户控件,母版页这些都弄上了),一堆处理阶段,我分了下组,主要有以下大的阶段:

1.初始化阶段Init

2.加载阶段Load

3。预渲染阶段PreRender

而对于Page来说,在每个阶段开始前和结束后对应有Pre*这样的预阶段和*Complete的完成阶段。

如上有细分(1.Page PreInit预初始化 2.Page Init 初始化 3.Page InitComplete初始化完成 4.Page PreLoad 预加载 5.Page Load加载 6.Page LoadComplete加载完成

7.Page PreRender 预渲染 8.Page PreRenderComplete预渲染完成 )

当然了,对于三大阶段不是一下子就搞定的,需要还得照顾孩子。

整体上来说,访问AAA.aspx这个页面,

A.显示Page要初始化了PreInit

B。接着自上而下的开始,对于Init,由内而外的,所以先是子控件的Init,才是福控件的Init。

发现了Master,要对Master Init,不过母板有子控件嘛,所以还是自上而下,碰到了Button Before这个按钮,所以对它Init.

再往下是一个Content PlaceHolder内容占位啦,对内容页也是从上倒下,由内而外的Init:

先碰到Page Content Button Init,然后后面有个嵌套的控件,对它由内而外(当然孩子多个的话也是有上而下)。内容页搞定后:

还是回到Master页来看,后面有个用户控件,还是那一套...

最后Master Init...

Page Init...

Page Init Complete...完成。

记住一句话:从上到下,由内而外(Init).

C.要Load和PreRender了,这个和B类似,不过注意顺序

从上到下,但是由外而内(恰恰这个深层的是相反的)

就是说先处理父控件在处理子控件。

所以对于Load来说是:

Page Load->Master Load->Master 第一个控件 Load->...(碰到深层度的由外而内)....

归纳:

Init事件(从上而下,由里而外)

Load和PreRender事件(从上到下,由外而内)。

仅作总结,如有错误望指正。

原文地址:https://www.cnblogs.com/xcf007/p/2809911.html