ASP.NET的Master和Content之间的事件发生顺序

今天自己编织程序验证了Master和Content的Load事件的发生顺序,代码如下:
Content的Load代码:
1        protected void Page_Load(object sender, EventArgs e)
2        {
3            Label1.Text = DateTime.Now.Ticks.ToString();
4            System.Threading.Thread.Sleep(1000);
5        }

Master的Load代码:
1        protected void Page_Load(object sender, EventArgs e)
2        {
4            Label2.Text = DateTime.Now.Ticks.ToString();
5            System.Threading.Thread.Sleep(1000);
6        }
结果:
内容页面时间: 633244468953985968 


母板时间:633244468964000368
从上可以看出,Content比Master首先调用Load函数。

今天从看到有人把相关事件顺序进行了排列,总结的相当全面:

母版页和内容页都可以包含控件的事件处理程序。对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。 

在某些情况下,内容页和母版页中会引发相同的事件。例如,两者都引发 Init 和 Load 事件。引发事件的一般规则是初始化事件从最里面的控件向最外面的控件引发,所有其他事件则从最外面的控件向最里面的控件引发。请记住,母版页会合并到内容页中并被视为内容页中的一个控件,这一点十分有用。

下面是母版页与内容页合并后事件的发生顺序:

母版页控件 Init 事件。

内容控件 Init 事件。

母版页 Init 事件。

内容页 Init 事件。

内容页 Load 事件。

母版页 Load 事件。

内容控件 Load 事件。

内容页 PreRender 事件。

母版页 PreRender 事件。

母版页控件 PreRender 事件。

内容控件 PreRender 事件。

posted @ 2007-09-03 20:13  Sangplus  阅读(495)  评论(1编辑  收藏  举报