Le cycle de vie d’une page ASP.NET avec page maîtresse et contrôles utilisateurs

Lorsqu'on affiche une page Web ASP.NET, toute une série d'événements est déclenchée, de l'initialisation de la page jusqu'à son affichage.

Dès la création d'une page Web dans Visual Studio, le squelette de la méthode Page_Load(), associée à l'événement Load de la page, est écrit dans le fichier .aspx.cs. Il faut toutefois savoir que de nombreux autres gestionnaires d'événement (Page_Init, Page_Load, Page_PreRender, etc.) sont prévus pour réagir à différents événements.

▼Publicité

Ces gestionnaires d'événement peuvent être définis dans une page Web (fichier .aspx.cs). Certains peuvent également être définis dans la page maîtresse (fichier .master.cs) ou encore dans un contrôle utilisateur (fichier .ascx.cs).

Les principaux événements de la page Web, de sa page maîtresse et de leurs contrôles utilisateurs seront exécutés dans un ordre précis. Notez que l'événement PreRender est un des derniers à être exécuté avant l'affichage de la page.

Opérations réalisées à chaque étape du processus

La liste des évènements impliqués dans le processus de génération d'une page Web est impressionnante. Voici un résumé de ces évènements.

Évènement Notes Utilisation
PreInit

Cet événement n'est disponible que pour la page. On ne peut donc pas l'utiliser pour une page maîtresse ni pour un contrôle utilisateur.

Les variables de session sont disponibles mais le ViewState n'est pas encore disponible.

Vous pouvez utiliser cet événement pour créer des contrôles dynamiquement.

Pour les contrôles serveurs définis dans le fichier .aspx, vous ne pouvez pas initialiser leurs valeurs ici car elles seront initialisées automatiquement à partir des balises du fichier .aspx lors d'un événement ultérieur.

Init

Tous les contrôles sont initialisés (informations lues dans le fichier .aspx).

Attention : vous ne devriez pas utiliser cet événement pour initialiser les propriétés des contrôles serveur car les valeurs données ici ne seront pas persistantes après un PostBack (les valeurs seront écrasées par celles retenues dans le ViewState).

InitComplete

Cet événement n'est disponible que pour la page.

 

PreLoad

Cet événement n'est disponible que pour la page.

Le ViewState est disponible donc sur un PostBack, les contrôles ont retrouvé leur valeur.

 

Load

 

Ici, vous pouvez initialiser les propriétés des contrôles serveur.

LoadComplete

Cet événement n'est disponible que pour la page.

Codez ici les traitements qui demandent à ce que tous les contrôles de la page soient chargés.

PreRender

Dernière occasion de modifier l'apparence de la page (ex : changer le texte d'un libellé, cacher un bouton, etc.).

Vous pouvez utiliser cet événement pour apporter des modifications aux contrôles juste avant que la page soit affichée.

PreRenderComplete

Cet événement n'est disponible que pour la page.

Les contrôles orientés données ont été remplis avec les données (DataBind).

Ici, vous pouvez coder les traitements nécessitant que tous les DataBind aient été exécutés. Attention : il est trop tard pour modifier les contrôles...

SaveStateComplete

Le ViewState de chaque contrôle a été enregistré.

Les modifications apportées ici ne seront pas reflétées dans les ViewStates lors du prochain PostBack.

Unload

Le code HTML de la page, incluant sa page maîtresse et les contrôles utlisateurs, a été envoyé au client.

 

Ordre d'exécution des événements lors du chargement initial de la page

Lorsqu'une page est basée sur une page maîtresse et que  la page ou sa page maîtresse contient des contrôles utilisateurs, il est important de connaître l'ordre d'exécution des événements de la page, de la page maîtresse et du contrôle utilisateur. Par exemple, le Init de la page est réalisé après celui des contrôles utilisateurs et de la page maîtresse alors que c'est l'inverse pour le Load.

Voici donc l'ordre d'exécution des événements

  1. PreInit de Default.aspx
  2. Init du contrôle utilisateur ajouté à la page maîtresse
  3. Init de la page maîtresse
  4. Init de Default.aspx
  5. InitComplete de Default.aspx
  6. PreLoad de Default.aspx
  7. Load de Default.aspx
  8. Load de la page maîtresse
  9. Load du contrôle utilisateur ajouté à la page maîtresse
  10. LoadComplete de Default.aspx
  11. PreRender de Default.aspx
    1. RowCreated des GridView placés sur Default.aspx
    2. RowDataBound des GridView placés sur Default.aspx
    3. DataBound des contrôles orientés données placés sur Default.aspx
  12. PreRender de la page maîtresse
  13. PreRender du contrôle utilisateur ajouté à la page maîtresse
  14. PreRenderComplete de Default.aspx

Lorsqu'on clique sur un bouton

À chaque fois qu'une opération force le rechargement d'une page, par exemple lorsqu'on clique sur un bouton, tout le cycle est repris du du début. Notez que la méthode associée à l'événement OnClick d'un bouton sera exécutée APRÈS les événements Init et Load.

  1. PreInit de Default.aspx
  2. Init du contrôle utilisateur ajouté à la page maîtresse
  3. Init de la page maîtresse
  4. Init de Default.aspx
  5. InitComplete de Default.aspx
  6. PreLoad de Default.aspx
  7. Load de Default.aspx
  8. Load de la page maîtresse
  9. Load du contrôle utilisateur ajouté à la page maîtresse
  10. Méthode associée à l'événement OnClick du bouton
  11. LoadComplete de Default.aspx
  12. PreRender de Default.aspx
    1. RowCreated des GridView placés sur Default.aspx
    2. RowDataBound des GridView placés sur Default.aspx
    3. DataBound des contrôles orientés données placés sur Default.aspx
  13. PreRender de la page maîtresse
  14. PreRender du contrôle utilisateur ajouté à la page maîtresse
  15. PreRenderComplete de Default.aspx

Si vous avez un doute quant à l'ordre d'exécution des différents événements, une technique efficace consiste à utiliser le débogueur pour constater, dans l'ordre, quels événements sont exécutés.

Pour plus d’information

« Vue d'ensemble du cycle de vie des pages ASP.NET ». MSDN. http://msdn.microsoft.com/fr-fr/library/ms178472.aspx

« Complete Lifecycle of an ASP.Net page and controls ». The Site Doctor. http://blogs.thesitedoctor.co.uk/tim/2006/06/30/Complete+Lifecycle+Of+An+ASPNet+Page+And+Controls.aspx

« ASP.NET Page Events Lifecycle ». Development With A Dot. http://weblogs.asp.net/ricardoperes/archive/2009/03/08/asp-net-page-events-lifecycle.aspx

« Understanding the order of Page events ». Cryer. http://www.cryer.co.uk/brian/csharp/ms_dotnet_order_of_page_events.htm

« Comprendre le cycle de vie d’une page ». Coding in .NET!. http://coding-in.net/fr/aspnet-comprendre-le-cycle-de-vie-dune-page/

FU Sam. « ASP.NET 2.0 Page Life Cycle ». Tech notes. http://fuchangmiao.blogspot.com/2007/11/aspnet-20-page-lifecycle.html

« The ASP.NET Page Lifecycle – A Basic Approach ». The code project. http://www.codeproject.com/Articles/20659/The-ASP-NET-Page-Lifecycle-A-Basic-Approach

« FAQ: Sequence that events are raised for Pages, UserControls, MasterPages and HttpModules ». ASP.NET. http://forums.asp.net/t/1191194.aspx/1

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories