为什么子控件中的某些事件在ASP.Net页面循环中以相反的顺序触发?

Sha*_*bie 2 asp.net events page-lifecycle

MSDN上ASP.Net页面生命周期文章:

尽管在每个控件上递归地发生Init和Load,但它们以相反的顺序发生.每个子控件的Init事件(以及Unload事件)发生在为其容器引发相应的事件之前(自下而上).但是,容器的Load事件发生在其子控件的Load事件(自上而下)之前.

这对unload事件很有意义,但为什么init呢?其他事件怎么样?

亲切的问候,

Kei*_*ith 5

这是由于这些页面的创建方式 - 用户控件是页面类的属性.它们在初始化时被创建(并因此初始化),这确保了它们的实例在构造函数和页面的init事件期间可用.

然后,当加载,预渲染和渲染事件发生时,页面的事件首先触发,并将事件级联到其中的所有内容.

当卸载和处置时,属性对象首先再次处理.

恕我直言,WebForm页面事件模型有点过于复杂.