Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / ASP.NET / General / November 2007

Tip: Looking for answers? Try searching our database.

PageHandler and events order

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Michal Valent - 30 Nov 2007 15:50 GMT
this is ProcessRequestMain
from
System.Web.UI.Page
Assembly: System.Web, Version=2.0.0.0

the question is how can one custom server control make its events fired
earlier than Page_Load event ?

private void ProcessRequestMain(bool includeStagesBeforeAsyncPoint, bool
includeStagesAfterAsyncPoint)
{
   try
   {
       HttpContext context = this.Context;
       string str = null;
       if (includeStagesBeforeAsyncPoint)
       {
           if (this.IsInAspCompatMode)
           {
               AspCompatApplicationStep.OnPageStartSessionObjects();
           }
           if (this.PageAdapter != null)
           {
               this._requestValueCollection =
this.PageAdapter.DeterminePostBackMode();
           }
           else
           {
               this._requestValueCollection = this.DeterminePostBackMode();
           }
           string callbackControlID = string.Empty;
           if (this.DetermineIsExportingWebPart())
           {
               if (!RuntimeConfig.GetAppConfig().WebParts.EnableExport)
               {
                   throw new
InvalidOperationException(SR.GetString("WebPartExportHandler_DisabledExportHandler"));
               }
               str = this.Request.QueryString["webPart"];
               if (string.IsNullOrEmpty(str))
               {
                   throw new
InvalidOperationException(SR.GetString("WebPartExportHandler_InvalidArgument"));
               }
               if (string.Equals(this.Request.QueryString["scope"],
"shared", StringComparison.OrdinalIgnoreCase))
               {
                   this._pageFlags.Set(4);
               }
               string str3 = this.Request.QueryString["query"];
               if (str3 == null)
               {
                   str3 = string.Empty;
               }
               this.Request.QueryStringText = str3;
               context.Trace.IsEnabled = false;
           }
           if (this._requestValueCollection != null)
           {
               if (this._requestValueCollection["__VIEWSTATEENCRYPTED"] !=
null)
               {
                   this.ContainsEncryptedViewState = true;
               }
               callbackControlID =
this._requestValueCollection["__CALLBACKID"];
               if ((callbackControlID != null) && (this._request.HttpVerb
== HttpVerb.POST))
               {
                   this._isCallback = true;
               }
               else if (!this.IsCrossPagePostBack)
               {
                   VirtualPath path = null;
                   if (this._requestValueCollection["__PREVIOUSPAGE"] !=
null)
                   {
                       try
                       {
                           path =
VirtualPath.CreateNonRelativeAllowNull(DecryptString(this._requestValueCollection["__PREVIOUSPAGE"]));
                       }
                       catch (CryptographicException)
                       {
                           this._pageFlags[8] = true;
                       }
                       if ((path != null) && (path !=
this.Request.CurrentExecutionFilePathObject))
                       {
                           this._pageFlags[8] = true;
                           this._previousPagePath = path;
                       }
                   }
               }
           }
           if (this.MaintainScrollPositionOnPostBack)
           {
               this.LoadScrollPosition();
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin PreInit");
           }
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_ENTER,
this._context.WorkerRequest);
           }
           this.PerformPreInit();
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_INIT_LEAVE,
this._context.WorkerRequest);
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End PreInit");
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin Init");
           }
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_ENTER,
this._context.WorkerRequest);
           }
           this.InitRecursive(null);
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_INIT_LEAVE,
this._context.WorkerRequest);
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End Init");
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin InitComplete");
           }
           this.OnInitComplete(EventArgs.Empty);
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End InitComplete");
           }
           if (this.IsPostBack)
           {
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "Begin LoadState");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_ENTER,
this._context.WorkerRequest);
               }
               this.LoadAllState();
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_VIEWSTATE_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End LoadState");
                   this.Trace.Write("aspx.page", "Begin ProcessPostData");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_ENTER,
this._context.WorkerRequest);
               }
               this.ProcessPostData(this._requestValueCollection, true);
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_POSTDATA_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End ProcessPostData");
               }
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin PreLoad");
           }
           this.OnPreLoad(EventArgs.Empty);
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End PreLoad");
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin Load");
           }
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_ENTER,
this._context.WorkerRequest);
           }
           this.LoadRecursive();
           if (EtwTrace.IsTraceEnabled(5, 4))
           {
               EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_LOAD_LEAVE,
this._context.WorkerRequest);
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End Load");
           }
           if (this.IsPostBack)
           {
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "Begin ProcessPostData
Second Try");
               }
               this.ProcessPostData(this._leftoverPostData, false);
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End ProcessPostData
Second Try");
                   this.Trace.Write("aspx.page", "Begin Raise
ChangedEvents");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_ENTER,
this._context.WorkerRequest);
               }
               this.RaiseChangedEvents();
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_POST_DATA_CHANGED_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End Raise
ChangedEvents");
                   this.Trace.Write("aspx.page", "Begin Raise
PostBackEvent");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_ENTER,
this._context.WorkerRequest);
               }
               this.RaisePostBackEvent(this._requestValueCollection);
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RAISE_POSTBACK_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End Raise
PostBackEvent");
               }
           }
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "Begin LoadComplete");
           }
           this.OnLoadComplete(EventArgs.Empty);
           if (context.TraceIsEnabled)
           {
               this.Trace.Write("aspx.page", "End LoadComplete");
           }
           if (this.IsPostBack && this.IsCallback)
           {
               this.PrepareCallback(callbackControlID);
           }
           else if (!this.IsCrossPagePostBack)
           {
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "Begin PreRender");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_ENTER,
this._context.WorkerRequest);
               }
               this.PreRenderRecursiveInternal();
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_PRE_RENDER_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End PreRender");
               }
           }
       }
       if ((this._asyncInfo == null) || this._asyncInfo.CallerIsBlocking)
       {
           this.ExecuteRegisteredAsyncTasks();
       }
       if (includeStagesAfterAsyncPoint)
       {
           if (this.IsCallback)
           {
               this.RenderCallback();
           }
           else if (!this.IsCrossPagePostBack)
           {
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "Begin
PreRenderComplete");
               }
               this.PerformPreRenderComplete();
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End PreRenderComplete");
               }
               if (context.TraceIsEnabled)
               {
                   this.BuildPageProfileTree(this.EnableViewState);
                   this.Trace.Write("aspx.page", "Begin SaveState");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_ENTER,
this._context.WorkerRequest);
               }
               this.SaveAllState();
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_SAVE_VIEWSTATE_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End SaveState");
                   this.Trace.Write("aspx.page", "Begin
SaveStateComplete");
               }
               this.OnSaveStateComplete(EventArgs.Empty);
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End SaveStateComplete");
                   this.Trace.Write("aspx.page", "Begin Render");
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_ENTER,
this._context.WorkerRequest);
               }
               if (str != null)
               {
                   this.ExportWebPart(str);
               }
               else
               {
                   this.RenderControl(this.CreateHtmlTextWriter(this.Response.Output));
               }
               if (EtwTrace.IsTraceEnabled(5, 4))
               {
                   EtwTrace.Trace(EtwTraceType.ETW_TYPE_PAGE_RENDER_LEAVE,
this._context.WorkerRequest);
               }
               if (context.TraceIsEnabled)
               {
                   this.Trace.Write("aspx.page", "End Render");
               }
               this.CheckRemainingAsyncTasks(false);
           }
       }
   }
   catch (ThreadAbortException exception)
   {
       HttpApplication.CancelModuleException exceptionState =
exception.ExceptionState as HttpApplication.CancelModuleException;
       if (((!includeStagesBeforeAsyncPoint ||
!includeStagesAfterAsyncPoint) || ((this._context.Handler != this) ||
(this._context.ApplicationInstance == null))) || ((exceptionState == null)
|| exceptionState.Timeout))
       {
           this.CheckRemainingAsyncTasks(true);
           throw;
       }
       this._context.ApplicationInstance.CompleteRequest();
       Thread.ResetAbort();
   }
   catch (ConfigurationException)
   {
       throw;
   }
   catch (Exception exception3)
   {
       PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_DURING_REQUEST);
       PerfCounters.IncrementCounter(AppPerfCounter.ERRORS_TOTAL);
       if (!this.HandleError(exception3))
       {
           throw;
       }
   }
}

mike
bruce barker (sqlwork.com) - 30 Nov 2007 17:26 GMT
as its your own control, you can fire events whenever you wnat. you don't
have to wait for the handler to tell you when to fire.

not sure why you want to break the page lifecycle though. from reflection
you can see the event order is:

 OnPreInit
 OnInit
 OnInitComplete
 LoadViewState
 ProcessPostData (postback only)
 OnPreLoad
 OnLoad
 OnLoadComplete
 ProcessPostData (IPostbackDataHandler only)
 Raise ChangedEvents (onChange, etc)
 Raise PostBackEvent (onclick, etc)
 OnPreRender
 OnPreRenderComplete (async tasks run)
 SaveViewStateState (write viewstate)
 OnSaveStateComplete

there is nothing magic about using OnLoad other than its the name of the
event between between postback data load and postback events firing. if you
want code to run after events, then use OnPreRender instead.

-- bruce (sqlwork.com)

> this is ProcessRequestMain
> from
[quoted text clipped - 294 lines]
>             }
>         }

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.