ASP.NET Webforms中的Page的事件执行顺序是怎么样的?
最佳答案
(1)母版页中控件Init事件;
(2)内容页中Content控件Init事件;
(3)母版页Init事件;
(4)内容页Init事件;
(5)内容页Load事件;
(6)母版页Load事件;
(7)内容页中Content控件Load事件;
(8)内容页PreRender事件;
(9)母版页PreRender事件;
(10)母版页控件PreRender事件。
(11)内容页中Content控件PreRender事件
Init,Load,PreRender事件执行顺序:
1)控件的Init事件
2)控件所在页面的Init事件
3)控件所在页面的Load事件
4)控件的Load事件
5)控件所在页面的PreRender事件
6)控件的PreRender事件
规律:
1)Init事件从最里面的控件(包括用户控件及普通控件)向最外面的控件(页面)引发,Load及PreRender等其他事件从最外面的控件向最里面的控件引发;
2)控件之间相同事件的执行顺序依控件在页面的位置按从左到右,从上到下的先后顺序执行。
注意:
1)切记用户控件也被视为页面中的一个控件;
2)把用户控件作为单独的一个特殊页面来看,它本身及其所包含的控件同样遵守相同的规律;
3)有时在客户端程序(如javascript)中会用到客户端body对像的onload事件,注意这个客户端事件是最后执行,即在服务器端所有事件执行完后才执行。
page类提供了四个顺序执行的事件Init,Load,PreRender和Unload
init事件发生在所有服务器端控件的状态(ViewState)被存储之前。
load事件发生在所有服务器端控件的状态被存储之后和所有的事件被触发之前。
PreRender事件发生在所有事件被触发之后和要回发给客户端的html还没有回发(这个过程也叫"呈现")之前。
unload事件发生在所有html都回发完成以后。从这四个事件可以看到page类的大致执行步骤。
详细的page类事件顺序是这样的:
获得客户端的post请求-〉
page类的继承类被构造-〉
page类的ProcessRequest方法被调用->
init事件被执行->
page类的虚函数CreateChildControls被调用->
服务器端控件的状态(来自post变量和ViewState)被存储->
load事件被执行->
我们自定义的服务器端控件的事件被执行->
PreRender事件被执行->
page类的虚函数Render方法被调用->
page类的虚函数RenderChildren方法被调用->
Http响应发往客户端->
unload事件被执行->
page类的继承类被解构-》(完)
我们知道一个页面上的控件很多是包含(父子)关系,所以这里的CreateChildControls和RenderChinldren函数应该就不难理解了。
这个事件顺序是理解asp.net页面类的关键,和前面客户端的三个事实结合起来理解,就可以解释asp.net怎么样把客户端和服务器端结合起来,从而实现从脚本编程转移到面向对象编程。无论是微软提供的webcontrols,或者是用户自定义控件,涉及到客户端和服务器端交互,原理都与此类似。
===================
此回答修改于:2010-10-15 12:27:00
(2)内容页中Content控件Init事件;
(3)母版页Init事件;
(4)内容页Init事件;
(5)内容页Load事件;
(6)母版页Load事件;
(7)内容页中Content控件Load事件;
(8)内容页PreRender事件;
(9)母版页PreRender事件;
(10)母版页控件PreRender事件。
(11)内容页中Content控件PreRender事件
Init,Load,PreRender事件执行顺序:
1)控件的Init事件
2)控件所在页面的Init事件
3)控件所在页面的Load事件
4)控件的Load事件
5)控件所在页面的PreRender事件
6)控件的PreRender事件
规律:
1)Init事件从最里面的控件(包括用户控件及普通控件)向最外面的控件(页面)引发,Load及PreRender等其他事件从最外面的控件向最里面的控件引发;
2)控件之间相同事件的执行顺序依控件在页面的位置按从左到右,从上到下的先后顺序执行。
注意:
1)切记用户控件也被视为页面中的一个控件;
2)把用户控件作为单独的一个特殊页面来看,它本身及其所包含的控件同样遵守相同的规律;
3)有时在客户端程序(如javascript)中会用到客户端body对像的onload事件,注意这个客户端事件是最后执行,即在服务器端所有事件执行完后才执行。
page类提供了四个顺序执行的事件Init,Load,PreRender和Unload
init事件发生在所有服务器端控件的状态(ViewState)被存储之前。
load事件发生在所有服务器端控件的状态被存储之后和所有的事件被触发之前。
PreRender事件发生在所有事件被触发之后和要回发给客户端的html还没有回发(这个过程也叫"呈现")之前。
unload事件发生在所有html都回发完成以后。从这四个事件可以看到page类的大致执行步骤。
详细的page类事件顺序是这样的:
获得客户端的post请求-〉
page类的继承类被构造-〉
page类的ProcessRequest方法被调用->
init事件被执行->
page类的虚函数CreateChildControls被调用->
服务器端控件的状态(来自post变量和ViewState)被存储->
load事件被执行->
我们自定义的服务器端控件的事件被执行->
PreRender事件被执行->
page类的虚函数Render方法被调用->
page类的虚函数RenderChildren方法被调用->
Http响应发往客户端->
unload事件被执行->
page类的继承类被解构-》(完)
我们知道一个页面上的控件很多是包含(父子)关系,所以这里的CreateChildControls和RenderChinldren函数应该就不难理解了。
这个事件顺序是理解asp.net页面类的关键,和前面客户端的三个事实结合起来理解,就可以解释asp.net怎么样把客户端和服务器端结合起来,从而实现从脚本编程转移到面向对象编程。无论是微软提供的webcontrols,或者是用户自定义控件,涉及到客户端和服务器端交互,原理都与此类似。
===================
此回答修改于:2010-10-15 12:27:00
回答时间:2010/10/15 12:27:00
| 回答者:Souidea
其他参考答案(0)
提交失败!请检查错误!错误信息:
以下信息或许对您有用:
- [已解决] 5 CS0029: Cannot implicitly convert type '... 2010/5/14 21:18:31
- [已解决] 20 类型“System.Web.UI.WebControls.SessionPara... 2010/5/7 17:31:20
- [已解决] 5 如何用Javascript获取ASP.NET WebForms中服务器空间Lab... 2010/3/26 0:07:33
- [已解决] 20 ASP.NET WebForms中服务器控件的ID和Name有什么关系? 2010/3/26 0:06:24