locked
Sequence that events are raised for Pages, UserControls, MasterPages and HttpModules RRS feed

  • Question

  • User-324486626 posted

    Understanding the Page Life Cycle can be very important as you begin to build Pages with MasterPages and UserControls.

    Does the Init event fire first for the Page, the MasterPage or the UserControl?  
    What about the Load event?

    If you make an incorrect assumption about the sequence that these events fire, then you may end up with a page that simply doesn't behave the way you had anticipated.

    By running a simple test, we can see exactly when each event fires.  Our test setup is composed of a Page, MasterPage, UserControl, Nested UserControl and Button control as follows:

    • The Page is tied to the MasterPage
    • The UserControl is on the Page
    • The Nested UserControl is on the UserControl
    • The Button is on the Nested UserControl.
    • Clicking the Button calls the Page.DataBind method

    Each event on these controls has been set to call Debug.WriteLine as each event is raised.  In addition to the events that get raised for regular pages, I've also set up an HttpModule and wired up all of those events as well. The results in the Debug output window of running this page and Clicking the Button are as follows:

    BeginRequest - HttpModule
    AuthenticateRequest - HttpModule
    PostAuthenticateRequest - HttpModule
    PostAuthorizeRequest - HttpModule
    ResolveRequestCache - HttpModule
    PostResolveRequestCache - HttpModule
    PostMapRequestHandler - HttpModule
    AcquireRequestState - HttpModule
    PostAcquireRequestState - HttpModule
    PreRequestHandlerExecute - HttpModule

    PreInit - Page

    Init - ChildUserControl
    Init - UserControl
    Init - MasterPage
    Init - Page

    InitComplete - Page

    LoadPageStateFromPersistenceMedium - Page 

    ProcessPostData (first try) - Page

    PreLoad - Page

    Load - Page
    Load - MasterPage
    Load - UserControl
    Load - ChildUserControl

    ProcessPostData (second try) - Page

    RaiseChangedEvents - Page
    RaisePostBackEvent - Page

    Click - Button - ChildUserControl

        DataBinding - Page
        DataBinding - MasterPage
        DataBinding - UserControl
        DataBinding - ChildUserControl

    LoadComplete - Page

    PreRender - Page
    PreRender - MasterPage
    PreRender - UserControl
    PreRender - ChildUserControl

    PreRenderComplete - Page

    SaveViewState - Page
    SavePageStateToPersistenceMedium - Page
    SaveStateComplete - Page

    Unload - ChildUserControl
    Unload - UserControl
    Unload - MasterPage
    Unload - Page

    PostRequestHandlerExecute - HttpModule
    ReleaseRequestState - HttpModule
    PostReleaseRequestState - HttpModule
    UpdateRequestCache - HttpModule
    PostUpdateRequestCache - HttpModule
    EndRequest - HttpModule
    PreSendRequestHeaders - HttpModule
    PreSendRequestContent - HttpModule 

    Sunday, December 18, 2011 5:08 AM

All replies

  • User197322208 posted

    If you make an incorrect assumption about the sequence that these events fire, then you may end up with a page that simply doesn't behave the way you had anticipated.

    That's why I like MVC. Simple and effective - and NO EVENTS - just ACTIONS from the user.

    Sunday, December 18, 2011 5:19 PM