事件顺序
客户发出POST请求-〉创建Page派生类,调用构造函数-〉调用Page类的IHttpHandler.ProcessRequest
如果创建一个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.