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事件(从上到下,由外而内)。
仅作总结,如有错误望指正。