事件顺序

客户发出POST请求-〉创建Page派生类,调用构造函数-〉调用Page类的IHttpHandler.ProcessRequest方法-〉激活Page类的Init事件-〉调用Page类的CreateChildControls虚方法-〉从POST变量和VIEWSTATE中还原服务器端控件状态-〉激活Page类的Load事件-〉激活服务器端控件事件-〉激活Page类的PreRender事件-〉调用Page类的Render虚方法-〉调用Page类的RenderChildren虚方法-〉发送HTTP响应给客户端-〉激活Page类的Unload事件-〉丢弃Page派生类的实例。
如果创建一个ASP.NET 2.0页面,并打开跟踪功能,就会看到主页面事件的启动顺序,它们按照下面的顺序启动:

(1) PreInit

(2) Init

(3) InitComplete

(4) PreLoad

(5) Load

(6) LoadComplete

(7) PreRender

(8) PreRenderComplete

(9) Unload

添加了这些新的页面事件后,就可以在页面编译期间在许多不同的地方处理页面和页面上的控件。

其中

●  InitComplete:表示页面完成了初始化

●  LoadComplete:表示页面完全加载到内存中

●  PreInit:表示页面初始化前的那一刻

●  PreLoad:表示页面加载到内存前的那一刻

●  PreRenderComplete:表示页面显示在浏览器中之前的那一刻

 如果页面从令一个页面继承,如BasePage:System.Web.UI.Page,在BasePage中做了一些扩展,如权限检查,而其他页面从BasePage继承,则BasePage和最终Page的事件激活顺序是:

UI.PreInit
Page.PreInit
UI.Init
Page.Init
UI.InitComplite
Page.InitComplite
UI.PreLoad
Page.PreLoad
UI.Load
Page.Load
UI.LoadComplete
Page.LoadComplete
UI.PreRender
Page.PreRender
UI.PreRenderComplete
Page.PreRenderComplete

如果使用了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下面顺序激活:

ContentPage.PreInit
Master.Init
ContentPage.Init
ContentPage.InitComplite
ContentPage.PreLoad
ContentPage.Load
Master.Load
ContentPage.LoadComplete
ContentPage.PreRender
Master.PreRender
ContentPage.PreRenderComplete

更进一步,如果ContentPage继承BasePage,那么,各事件的执行顺序将变成:

UI.PreInit
ContentPage.PreInit
Master.Init
UI.Init
ContentPage.Init
UI.InitComplite
ContentPage.InitComplite
UI.PreLoad
ContentPage.PreLoad
UI.Load
ContentPage.Load
Master.Load
UI.LoadComplete
ContentPage.LoadComplete
UI.PreRender
ContentPage.PreRender
Master.PreRender
UI.PreRenderComplete
ContentPage.PreRenderComplete

在使用ASP.NET页面时,一定要理解刚才介绍的页面事件。它们非常重要,因为在页面生存期的特定位置,要在这些事件中放置许多页面代码。

在Active Server Pages 3.0中,开发人员把页面传送给应用程序中的其他页面。ASP.NET页面一般要回送给自己,以处理事件(例如按钮单击事件)。

所以,必须区分终端用户在第一次加载页面时传送的内容和回送的内容。回送就是传送回原来的页面。回送包含在初始页面上收集的所有窗体信息,以备在需要时处理。

所有的回送都在ASP.NET页面上进行,所以要弄清楚是请求页面的第一个实例,还是请求回送的原来的页面。使用Page类的IsPostBack属性可以进行此项检查.

跨页面的传送

跨页面的传送就是提交窗体(例如Page1.aspx),并把这个窗体和所有的控件值都传送给另一个页面(Page2.aspx)。

 

要从第二个页面中获得Page1.aspx中的控件值,有两个选项。要获得从前一个页面传送过来的控件值,只需创建该控件类型的一个实例,并用PreviousPage属性中的FindControl方法填充该实例。赋予FindControl方法的String值是Id值,它用于前一个页面上的服务器控件。赋予了值之后,就可以处理该服务器控件及其值了,就好像它最初位于当前页面上一样。从例子中可以看出,可以从控件中提取Text和SelectedDate属性。

从第一个页面(Page1.aspx)中获取控件值的另一种方法是创建该控件的Property.

转:http://book.csdn.net/bookfiles/171/1001717699.shtml

posted on 2008-07-23 23:34  Roamman  阅读(949)  评论(0编辑  收藏  举报