Page_Load Page_Init方法使用原理

时间:2008-06-11 00:00 来源:网管之家bitsCN.com 字体:[ ] 评论:

        网页的生命周期列表:

          PreInit (2.0)
        ->初始化Theme,应用MasterPage和控件Skin
        ->Init
        ->InitComplete (2.0)
        ->If PostBack,创建子控件并加载控件/视图状态
        ->PreLoad (2.0)
        ->Load
        ->If PostBack,则触发服务器端事件
        ->LoadComplete (2.0)
        ->If not PostBack,则创建子控件
        ->PreRender
        ->PreRenderComplete (2.0)
        ->保存控件/视图状态
        ->SaveStateComplete (2.0)
        ->Render
        ->Unload

        需要注意的是上图中标注(2.0)的事件即ASP.NET 2.0中新增的事件都仅仅是Page类中可以使用,并不是像其他事件一样可以在控件中使用。

        ASP.NET 2.0中可以通过启用(默认值为True)AutoEventWireUp为网页事件创建事件处理程序,并使用隐式为事件处理程序注册的方法名。
        以下是VS2005隐式为各个事件添加关联的方法:

        事件                                                ->           方法名
        Page.PreInit                                     ->           Page_PreInit
        Control.Init                                      ->           Page_Init
        Page.InitComplete                            ->           Page_InitComplete
        Page.PreLoad                                    ->           Page_PreLoad
        Control.Load                                     ->           Page_Load
        Page.LoadComplete                           ->           Page_LoadComplete
        Control.PreRender                             ->           Page_PreRender
        Control.DataBinding                          ->           Page_DataBind
        Page.PreRenderComplete                   ->           Page_PreRenderComplete
        Page.SaveStateComplete                     ->           Page_SaveStateComplete
        Control.Unload                                    ->           Page_Unload
        TemplateControl.Error                        ->           Page_Error
        TemplateControl.AbortTransation     ->   Page_AbortTransation
        TemplateControl.AbortTransation     ->   OnTransationAbort
        TemplateControl.CommitTransation   ->   Page_CommitTransation
        TemplateControl.CommitTransation   ->   OnTransationCommit

        Page基类会在请求的开头阶段调用基类TemplateControl的HookUpAutomaticHandlers方法。该方法遍历上表中所示的方法名,并使用反射在程序员的类中查找具有相同名称和合适特征标的方法。如果找到合适的方法,则创建一个类型合适的委托,并使用该方法初始化它,并将其加入委托列表,该委托在相应事件发生时候将被触发。
        这些事件都是由基类Page的一个虚方法或者Page类从基类Control继承的虚方法触发。所以可以有三种方法注册这些事件:(以Load事件为例)

        1、显式的将一个委托和一个事件关联起来(通常都是在网页的Init处理程序中)
        2、编写一个名为Page_Load的方法,并使其特征标和事件相同
        3、重写Override虚方法Onload

        这个三个方法中重写Override比较快一点点,但是VS2005默认是第二种。

顶一下(0) 踩一下(1)
Top_arrow