Tim

Footprints in the snow of a warped mind

Complete Lifecycle of an ASP.Net page and controls

Where to find me

Flickr Icon  Twitter Icon  Linked In Icon  FaceBook Icon  Windows Live Alerts Butterfly  RSS 2.0 

FreeAgent Small Business Online Accounting
Business Protection by Crisis Cover

Tag Cloud

AJAX (4) Analysis (3) ASP (6) ASP.Net (59) Error Reporting (4) Web Service (2) WSDL (1) Atlas (2) Azure (1) Born In The Barn (1) Business (89) Business Start-up Advice (32) Client (17) Expanding Your Business (23) Recruitment (1) C# (22) Canoeing (4) Canoe Racing (5) Cheshire Ring Race (5) Racing (2) Training (4) CIMA (1) Cisco (1) 7970G (1) CMS (1) Code Management (1) Cohorts (4) Commerce4Umbraco (1) Content (1) Content Management (1) Content Management System (1) CSS (4) dasBlog (5) DDD (2) DDDSW (1) Design (11) Icons (1) Development (26) Domain Names (1) eCommerce (12) Employment (2) General (39) Christmas (6) Fun and Games (11) Internet (22) Random (46) RX-8 (8) Git (1) Google (1) Google AdWords (1) Google Analytics (1) Hacking (1) Helpful Script (3) Home Cinema (2) Hosting (2) HTML (3) IIS (11) iPhone (1) JavaScript (5) jQuery (2) Marketing (6) Email (1) Multipack (1) MVC (1) Networking (3) Nintendo (1) Nuget (1) OS Commerce (1) Payment (1) Photography (1) PHP (1) Plugin (1) PowerShell (3) Presentation (1) Press Release (1) Productivity (3) Random Thought (1) Script (2) Security (2) SEO (6) Server Maintenance (7) Server Management (12) Social Media (2) Social Networking (3) Experiment (1) Software (11) Office (5) Visual Studio (14) Windows (5) Vista (1) Source Control (1) SQL (9) SQL Server (19) Statistics (2) Stored Procedure (1) Sublime Text 2 (1) SVN (1) TeaCommerce (1) Testing (2) The Cloud (1) The Site Doctor (136) Turnover Challenge (1) Twitter (3) uCommerce (13) Umbraco (31) 2009 (1) 2011 (1) Useful Script (2) Virtual Machine (1) Web Development (71) WebDD (33) Wii (1) Windows Azure (1) XSLT (1)

Blog Archive

Search

<May 2013>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

Recent Comments

Blog Archive

Various Links

Google+

Blogs I Read

[Feed] Google Blog
Official Google Webmaster Central Blog
[Feed] Matt Cutts
Gadgets, Google, and SEO
[Feed] Ol' Deano's Blog
My mate Dean's blog on my space, equally as random as mine but not off on as much of a tangent!
[Feed] Sam's Blog
Sam is one of my younger brothers studying Product Design and Manufacture at Loughborough, this is his blog :) Enjoy!

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

newtelligence dasBlog 2.2.8279.16125

Send mail to the author(s) Email Me (Tim Gaunt)

© 2013 Tim Gaunt.

Sign In

# Friday, June 30, 2006

Complete Lifecycle of an ASP.Net page and controls

Friday, June 30, 2006 9:01:00 AM (GMT Daylight Time, UTC+01:00)

Julian Voelcker raised a question on the MsWebDev mailing list the other day that I've been meaning to investigate for a while as it's something that I have to double check on every time I write a new custom control -the various lifecycles an ASP.Net page.

Many people have blogged about the lifecycle of an ASP.Net Page or Master Page but every time I need to find the complete lifecycle of a control it’s not so easy. Today I wrote a couple of test pages to generate a reference.

The pages are very simple, I just overrode every method I could find and wrote to the trace. For completeness when the method called its base I wrapped it with “Start MethodName” and “End MethodName” (if you look at the trace outputs below you will see why). I did this for the Master Page (.master), Page (.aspx), User Control (.ascx) and Web Control (.cs), the page structre was simple:

  • Master Page
    • Page
      • User Control
      • Web Control

For clarity I’ve split the produced trace into 5 individual reference sections:

ASP.Net 2.0 Master Page Life Cycle

  • Start Construct()
  • End Construct()
  • Start FrameworkInitialize()
  • End FrameworkInitialize()
  • Start AddParsedSubObject(object obj)
    • CreateControlCollection()
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End AddParsedSubObject(object obj)
  • Start AddParsedSubObject(object obj)
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End AddParsedSubObject(object obj)
  • Start AddParsedSubObject(object obj)
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End AddParsedSubObject(object obj)
  • Start AddParsedSubObject(object obj)
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End AddParsedSubObject(object obj)
  • Start AddParsedSubObject(object obj)
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End AddParsedSubObject(object obj)
  • ResolveAdapter()
  • Start OnInit(EventArgs e)
  • End OnInit(EventArgs e)
  • Start TrackViewState()
  • End TrackViewState()
  • Start OnLoad(EventArgs e)
    • Page_Load(object sender, EventArgs e)
  • End OnLoad(EventArgs e)
  • Start EnsureChildControls()
    • ResolveAdapter()
    • Start CreateChildControls()
    • End CreateChildControls()
  • End EnsureChildControls()
  • Start OnPreRender(EventArgs e)
  • End OnPreRender(EventArgs e)
  • SaveViewState()
  • SaveViewState()
  • HasControls()
  • Start RenderControl(HtmlTextWriter writer)
    • Start Render(HtmlTextWriter writer)
      • Start RenderChildren(HtmlTextWriter writer)
      • End RenderChildren(HtmlTextWriter writer)
    • End Render(HtmlTextWriter writer)
  • End RenderControl(HtmlTextWriter writer)

ASP.Net 2.0 Page Life Cycle

  • ResolveAdapter()
  • DeterminePostBackMode()
  • Begin PreInit
    • Start OnPreInit(EventArgs e)
    • End OnPreInit(EventArgs e)
    • HasControls()
    • Start RemovedControl(Control control)
    • End RemovedControl(Control control)
    • ResolveAdapter()
    • Start AddedControl(Control control, int index)
    • End AddedControl(Control control, int index)
  • End PreInit
  • Begin Init
    • ResolveAdapter()
    • Start OnInit(EventArgs e)
    • End OnInit(EventArgs e)
    • Start TrackViewState()
    • End TrackViewState()
  • End Init
  • Begin InitComplete
    • Start OnInitComplete(EventArgs e)
    • End OnInitComplete(EventArgs e)
  • End InitComplete
  • Begin PreLoad
    • Start OnPreLoad(EventArgs e)
    • End OnPreLoad(EventArgs e)
  • End PreLoad
  • Begin Load
    • Start OnLoad(EventArgs e)
      • Page_Load(object sender, EventArgs e)
    • End OnLoad(EventArgs e)
  • End Load
  • Begin LoadComplete
    • Start OnLoadComplete(EventArgs e)
    • End OnLoadComplete(EventArgs e)
  • End LoadComplete
  • Begin PreRender
    • Start EnsureChildControls()
      • ResolveAdapter()
      • Start CreateChildControls()
      • End CreateChildControls()
    • End EnsureChildControls()
    • Start OnPreRender(EventArgs e)
    • End OnPreRender(EventArgs e)
  • End PreRender
  • Begin PreRenderComplete
    • Start OnPreRenderComplete(EventArgs e)
    • End OnPreRenderComplete(EventArgs e)
  • End PreRenderComplete
  • SaveViewState()
  • Begin SaveState
    • SaveViewState()
    • HasControls()
    • Start SavePageStateToPersistenceMedium(object state)
      • ResolveAdapter()
    • End SavePageStateToPersistenceMedium(object state)
  • End SaveState
  • Begin SaveStateComplete
    • Start OnSaveStateComplete(EventArgs e)
    • End OnSaveStateComplete(EventArgs e)
  • End SaveStateComplete
  • Begin Render
    • CreateHtmlTextWriter(System.IO.TextWriter tw)
    • Start RenderControl(HtmlTextWriter writer)
      • Start Render(HtmlTextWriter writer)
        • Start RenderChildren(HtmlTextWriter writer)
        • End RenderChildren(HtmlTextWriter writer)
      • End Render(HtmlTextWriter writer)
    • End RenderControl(HtmlTextWriter writer)
  • End Render
  • CreateHtmlTextWriter(System.IO.TextWriter tw)

ASP.Net 2.0 User Control Life Cycle

  • Start Construct()
  • End Construct()
  • Start FrameworkInitialize()
  • End FrameworkInitialize()
  • ResolveAdapter()
  • Start OnInit(EventArgs e)
  • End OnInit(EventArgs e)
  • Start TrackViewState()
  • End TrackViewState()
  • Start OnLoad(EventArgs e)
    • Page_Load(object sender, EventArgs e)
  • End OnLoad(EventArgs e)
  • Start EnsureChildControls()
    • ResolveAdapter()
    • Start CreateChildControls()
    • End CreateChildControls()
  • End EnsureChildControls()
  • Start OnPreRender(EventArgs e)
  • End OnPreRender(EventArgs e)
  • SaveViewState()
  • SaveViewState()
  • HasControls()
  • Start RenderControl(HtmlTextWriter writer)
    • Start Render(HtmlTextWriter writer)
      • Start RenderChildren(HtmlTextWriter writer)
      • End RenderChildren(HtmlTextWriter writer)
    • End Render(HtmlTextWriter writer)
  • End RenderControl(HtmlTextWriter writer)

ASP.Net 2.0 Web Control Life Cycle

  • Constructor Test()
  • Start ApplyStyleSheetSkin(Page page)
  • End ApplyStyleSheetSkin(Page page)
  • ResolveAdapter()
  • Start OnInit(EventArgs e)
  • End OnInit(EventArgs e)
  • Start TrackViewState()
  • End TrackViewState()
  • Start OnLoad(EventArgs e)
  • End OnLoad(EventArgs e)
  • Start EnsureChildControls()
    • ResolveAdapter()
    • Start CreateChildControls()
    • End CreateChildControls()
  • End EnsureChildControls()
  • Start OnPreRender(EventArgs e)
  • End OnPreRender(EventArgs e)
  • SaveViewState()
  • SaveViewState()
  • HasControls()
  • Start RenderControl(HtmlTextWriter writer)
    • Start Render(HtmlTextWriter writer)
      • Start RenderBeginTag(HtmlTextWriter writer)
        • Start AddAttributesToRender(HtmlTextWriter writer)
        • End AddAttributesToRender(HtmlTextWriter writer)
      • End RenderBeginTag(HtmlTextWriter writer)
    • Start RenderContents(HtmlTextWriter writer)
      • Start RenderChildren(HtmlTextWriter writer)
      • End RenderChildren(HtmlTextWriter writer)
    • End RenderContents(HtmlTextWriter writer)
    • Start RenderEndTag(HtmlTextWriter writer)
    • End RenderEndTag(HtmlTextWriter writer)
    • End Render(HtmlTextWriter writer)
  • End RenderControl(HtmlTextWriter writer)

Complete Trace

Category Message
Page ResolveAdapter()
Page DeterminePostBackMode()
aspx.page Begin PreInit
Page Start OnPreInit(EventArgs e)
Page End OnPreInit(EventArgs e)
MasterPage Start Construct()
MasterPage End Construct()
Page HasControls()
Page Start RemovedControl(Control control)
Page End RemovedControl(Control control)
MasterPage Start FrameworkInitialize()
MasterPage End FrameworkInitialize()
MasterPage Start AddParsedSubObject(object obj)
MasterPage CreateControlCollection()
MasterPage Start AddedControl(Control control, int index)
MasterPage End AddedControl(Control control, int index)
MasterPage End AddParsedSubObject(object obj)
MasterPage Start AddParsedSubObject(object obj)
MasterPage Start AddedControl(Control control, int index)
Page ResolveAdapter()
MasterPage End AddedControl(Control control, int index)
MasterPage End AddParsedSubObject(object obj)
MasterPage Start AddParsedSubObject(object obj)
MasterPage Start AddedControl(Control control, int index)
MasterPage End AddedControl(Control control, int index)
MasterPage End AddParsedSubObject(object obj)
UserControl Start Construct()
UserControl End Construct()
UserControl Start FrameworkInitialize()
UserControl End FrameworkInitialize()
CustomWebControl Constructor Test()
CustomWebControl Start ApplyStyleSheetSkin(Page page)
CustomWebControl End ApplyStyleSheetSkin(Page page)
MasterPage Start AddParsedSubObject(object obj)
MasterPage Start AddedControl(Control control, int index)
MasterPage End AddedControl(Control control, int index)
MasterPage End AddParsedSubObject(object obj)
MasterPage Start AddParsedSubObject(object obj)
MasterPage Start AddedControl(Control control, int index)
MasterPage End AddedControl(Control control, int index)
MasterPage End AddParsedSubObject(object obj)
Page Start AddedControl(Control control, int index)
Page End AddedControl(Control control, int index)
aspx.page End PreInit
aspx.page Begin Init
Page ResolveAdapter()
MasterPage ResolveAdapter()
UserControl ResolveAdapter()
UserControl Start OnInit(EventArgs e)
UserControl End OnInit(EventArgs e)
UserControl Start TrackViewState()
UserControl End TrackViewState()
CustomWebControl ResolveAdapter()
CustomWebControl Start OnInit(EventArgs e)
CustomWebControl End OnInit(EventArgs e)
CustomWebControl Start TrackViewState()
CustomWebControl End TrackViewState()
MasterPage Start OnInit(EventArgs e)
MasterPage End OnInit(EventArgs e)
MasterPage Start TrackViewState()
MasterPage End TrackViewState()
Page Start OnInit(EventArgs e)
Page End OnInit(EventArgs e)
Page Start TrackViewState()
Page End TrackViewState()
aspx.page End Init
aspx.page Begin InitComplete
Page Start OnInitComplete(EventArgs e)
Page End OnInitComplete(EventArgs e)
aspx.page End InitComplete
aspx.page Begin PreLoad
Page Start OnPreLoad(EventArgs e)
Page End OnPreLoad(EventArgs e)
aspx.page End PreLoad
aspx.page Begin Load
Page Start OnLoad(EventArgs e)
Page Page_Load(object sender, EventArgs e)
Page End OnLoad(EventArgs e)
MasterPage Start OnLoad(EventArgs e)
MasterPage Page_Load(object sender, EventArgs e)
MasterPage End OnLoad(EventArgs e)
UserControl Start OnLoad(EventArgs e)
UserControl Page_Load(object sender, EventArgs e)
UserControl End OnLoad(EventArgs e)
CustomWebControl Start OnLoad(EventArgs e)
CustomWebControl End OnLoad(EventArgs e)
aspx.page End Load
aspx.page Begin LoadComplete
Page Start OnLoadComplete(EventArgs e)
Page End OnLoadComplete(EventArgs e)
aspx.page End LoadComplete
aspx.page Begin PreRender
Page Start EnsureChildControls()
Page ResolveAdapter()
Page Start CreateChildControls()
Page End CreateChildControls()
Page End EnsureChildControls()
Page Start OnPreRender(EventArgs e)
Page End OnPreRender(EventArgs e)
MasterPage Start EnsureChildControls()
MasterPage ResolveAdapter()
MasterPage Start CreateChildControls()
MasterPage End CreateChildControls()
MasterPage End EnsureChildControls()
MasterPage Start OnPreRender(EventArgs e)
MasterPage End OnPreRender(EventArgs e)
UserControl Start EnsureChildControls()
UserControl ResolveAdapter()
UserControl Start CreateChildControls()
UserControl End CreateChildControls()
UserControl End EnsureChildControls()
UserControl Start OnPreRender(EventArgs e)
UserControl End OnPreRender(EventArgs e)
CustomWebControl Start EnsureChildControls()
CustomWebControl ResolveAdapter()
CustomWebControl Start CreateChildControls()
CustomWebControl End CreateChildControls()
CustomWebControl End EnsureChildControls()
CustomWebControl Start OnPreRender(EventArgs e)
CustomWebControl End OnPreRender(EventArgs e)
aspx.page End PreRender
aspx.page Begin PreRenderComplete
Page Start OnPreRenderComplete(EventArgs e)
Page End OnPreRenderComplete(EventArgs e)
aspx.page End PreRenderComplete
Page SaveViewState()
MasterPage SaveViewState()
UserControl SaveViewState()
CustomWebControl SaveViewState()
aspx.page Begin SaveState
Page SaveViewState()
Page HasControls()
MasterPage SaveViewState()
MasterPage HasControls()
UserControl SaveViewState()
UserControl HasControls()
CustomWebControl SaveViewState()
CustomWebControl HasControls()
Page Start SavePageStateToPersistenceMedium(object state)
Page ResolveAdapter()
Page End SavePageStateToPersistenceMedium(object state)
aspx.page End SaveState
aspx.page Begin SaveStateComplete
Page Start OnSaveStateComplete(EventArgs e)
Page End OnSaveStateComplete(EventArgs e)
aspx.page End SaveStateComplete
aspx.page Begin Render
Page CreateHtmlTextWriter(System.IO.TextWriter tw)
Page Start RenderControl(HtmlTextWriter writer)
Page Start Render(HtmlTextWriter writer)
Page Start RenderChildren(HtmlTextWriter writer)
MasterPage Start RenderControl(HtmlTextWriter writer)
MasterPage Start Render(HtmlTextWriter writer)
MasterPage Start RenderChildren(HtmlTextWriter writer)
UserControl Start RenderControl(HtmlTextWriter writer)
UserControl Start Render(HtmlTextWriter writer)
UserControl Start RenderChildren(HtmlTextWriter writer)
UserControl End RenderChildren(HtmlTextWriter writer)
UserControl End Render(HtmlTextWriter writer)
UserControl End RenderControl(HtmlTextWriter writer)
CustomWebControl Start RenderControl(HtmlTextWriter writer)
CustomWebControl Start Render(HtmlTextWriter writer)
CustomWebControl Start RenderBeginTag(HtmlTextWriter writer)
CustomWebControl Start AddAttributesToRender(HtmlTextWriter writer)
CustomWebControl End AddAttributesToRender(HtmlTextWriter writer)
CustomWebControl End RenderBeginTag(HtmlTextWriter writer)
CustomWebControl Start RenderContents(HtmlTextWriter writer)
CustomWebControl Start RenderChildren(HtmlTextWriter writer)
CustomWebControl End RenderChildren(HtmlTextWriter writer)
CustomWebControl End RenderContents(HtmlTextWriter writer)
CustomWebControl Start RenderEndTag(HtmlTextWriter writer)
CustomWebControl End RenderEndTag(HtmlTextWriter writer)
CustomWebControl End Render(HtmlTextWriter writer)
CustomWebControl End RenderControl(HtmlTextWriter writer)
MasterPage End RenderChildren(HtmlTextWriter writer)
MasterPage End Render(HtmlTextWriter writer)
MasterPage End RenderControl(HtmlTextWriter writer)
Page End RenderChildren(HtmlTextWriter writer)
Page End Render(HtmlTextWriter writer)
Page End RenderControl(HtmlTextWriter writer)
aspx.page End Render
Page CreateHtmlTextWriter(System.IO.TextWriter tw)
 

Don't forget to follow me on Twitter.

Wednesday, February 28, 2007 8:49:37 PM (GMT Standard Time, UTC+00:00)
Found this via Google, it's extremely useful so thank you.
Thursday, March 01, 2007 7:20:41 AM (GMT Standard Time, UTC+00:00)
You're welcome, I'm glad it was of use to you :)
Wednesday, August 22, 2007 3:33:32 PM (GMT Daylight Time, UTC+01:00)
Very nice!
CodeChampion
Wednesday, December 26, 2007 6:56:31 PM (GMT Standard Time, UTC+00:00)
Good job. Anytime I write some user or custom controls I always get mad about lifecycle. Anyway, I think ms should have made it simpler. Especially the DataBound events are not so smart as they often simply destroy the pre-create child hierarchy and build it again. (If you used Reflector against System.Web, you know what I mean).
Ah ! Maybe you should trace twice : one for not PostBack scenario (Http-Get) and one for PostBack (Http-Post). I forgot the details now, but some months ago I noticed that the events raise in a slightly different order, especially the PreRender event.
Best regards, Alex
alex
Wednesday, May 14, 2008 7:40:21 PM (GMT Daylight Time, UTC+01:00)
Hi,

I was going through it. Now doubt you have done the best job in the world. But can you do the favour of Putting the trace along with PostBack.Since some of really important events like LoadPostBackData and LoadViewStateData aren't there.

Thanks and Regards
Mohit Thakral
Mohit Thakral
Monday, September 22, 2008 1:55:39 PM (GMT Daylight Time, UTC+01:00)
Very useful, Thanks a lot
KurtDC
Friday, October 31, 2008 1:16:26 PM (GMT Standard Time, UTC+00:00)
A great job it is.

I'm wondering if you can share the source with us on how you traced it.

I managed to re-produce a lot of it but still missing a few of yours. I will print it out and stick it up on the wall for all to look on a day to day basis.

To me, it's a great contribution to the community.

Much appreciate it.
Thursday, November 06, 2008 4:32:22 PM (GMT Standard Time, UTC+00:00)
Totally agree with Liming.

I'd also like to see the code, if not posible to post it, could you please e-mail it.

Thanks bunch.
Miro
Monday, November 24, 2008 3:52:57 PM (GMT Standard Time, UTC+00:00)
Well done!!! Thank you very much!!!
Wei
Tuesday, November 25, 2008 2:19:36 PM (GMT Standard Time, UTC+00:00)
I've had a look around for the source but I couldn't find it in my archives, I will have it somewhere so bare with me but I may just update it for 3.5 incase there are additional events etc.

Tim
Thursday, July 23, 2009 12:10:08 PM (GMT Daylight Time, UTC+01:00)
Very good reference. Thank you very much!
Nico
Wednesday, August 12, 2009 3:33:27 PM (GMT Daylight Time, UTC+01:00)
Good work, its very useful. can i have the source code of it, could you please mail me?

Thanks in advance
Palavesh
Palavesh
Sunday, September 13, 2009 8:33:37 AM (GMT Daylight Time, UTC+01:00)
Hi Tim, This is an amazing work and very useful. Thanks for posting.
Sandeep
Tuesday, September 29, 2009 4:26:13 AM (GMT Daylight Time, UTC+01:00)
thanks for your post! It is useful for me! but it is more useful if you add more detail, such as where each step happen (server side or client side)
-- sorry about my bad English--
vnd
Monday, January 11, 2010 3:44:04 PM (GMT Standard Time, UTC+00:00)
Thanks a lot! I'm just missing Validation there.
Vlado
Saturday, June 25, 2011 7:14:59 AM (GMT Daylight Time, UTC+01:00)
Great post. The most complete information on page lifecycle. May I also recommend this post:
<a href='http://www.thoughtresults.com/asp-net-page-lifecycle'>ASP.NET Page LifeCycle</a>
Micheal
Thursday, October 20, 2011 9:18:51 PM (GMT Daylight Time, UTC+01:00)
Nice Post!
Very useful information!
Thank you very much!
Thursday, August 16, 2012 5:55:39 PM (GMT Daylight Time, UTC+01:00)
Worth more than gold!
Name
E-mail
(will show your gravatar icon)
Home page

Comment (HTML not allowed)  

Live Comment Preview