Exporter (0) Imprimer
Développer tout
Cet article a fait l'objet d'une traduction manuelle. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte.
Traduction
Source

Vue d'ensemble du cycle de vie des pages ASP.NET

Lorsqu'une page ASP.NET s'exécute, elle parcourt un cycle de vie au cours duquel elle exécute une série d'étapes de traitement. Ces étapes sont l'initialisation, l'instanciation des contrôles, la restauration et la conservation de l'état, l'exécution du code du gestionnaire d'événements et le rendu. Il est important que vous compreniez le cycle de vie de la page afin pouvoir écrire le code à l'étape précise du cycle de vie correspondant à l'effet que vous comptez obtenir.

Si vous développez des contrôles personnalisés, vous devez connaître le cycle de vie de la page afin de correctement initialiser les contrôles, remplir leurs propriétés avec des données d'état d'affichage et exécuter leur code de comportement. Le cycle de vie d'un contrôle repose sur le cycle de vie de la page, or la page déclenche nombre des événements que vous devez gérer dans un contrôle personnalisé.

Cette rubrique contient les sections suivantes :

De façon générale, la page passe par les étapes décrites dans le tableau suivant. En plus des étapes du cycle de vie de la page, il existe des étapes d'application qui surviennent avant et après une demande sans être spécifiques à une page. Pour plus d'informations, consultez Présentation du cycle de vie de l'application ASP.NET (en anglais) et Vue d'ensemble du cycle de vie des applications ASP.NET pour IIS 7.0.

Certaines parties du cycle de vie se produisent uniquement lorsqu'une page est traitée comme une publication (postback). Pour les publications (postback), le cycle de vie de la page est le même pendant une publication de page partielle (comme lorsque vous utilisez un contrôle UpdatePanel) que pendant la publication d'une page entière.

Étape

Description

Demande de page

La demande de page intervient avant que le cycle de vie de la page ne commence. Lorsque la page est demandée par un utilisateur, ASP.NET détermine si elle doit être analysée et compilée (déclenchant ainsi la vie de la page), ou s'il est possible de répondre à la demande en transmettant une version de la page mise en cache sans exécuter la page.

Start

Pendant l'étape de démarrage, les propriétés de la page, comme Request et Response, sont définies. À ce stade, la page détermine également si la demande est une publication ou une nouvelle demande et définit la propriété IsPostBack. La page définit également la propriété UICulture.

Initialisation

Pendant l'initialisation de la page, les contrôles présents dans la page sont disponibles et la propriété UniqueID de chaque contrôle est définie. Une page maître et des thèmes sont également appliqués à la page le cas échéant. Si la demande actuelle est une publication, les données de publication n'ont pas encore été chargées et les valeurs de propriété des contrôles n'ont pas été ramenées à celles de l'état d'affichage.

Chargement

Pendant l'étape de chargement, si la demande actuelle est une publication, les propriétés des contrôles sont chargées à l'aide des informations récupérées dans l'état d'affichage et l'état du contrôle.

Gestion d'événements de publication

Si la requête est une publication (postback), les gestionnaires d'événements des contrôles sont appelés. La méthode Validate de tous les contrôles de validateur est ensuite appelée et définit la propriété IsValid des contrôles de validateur individuels et de la page.

Rendu

Avant le rendu, l'état d'affichage est enregistré pour la page et tous les contrôles. Pendant l'étape de rendu, la page appelle la méthode Render pour chaque contrôle, en fournissant un TextWriter qui écrit sa sortie dans l'objet OutputStream de la propriété Response de la page.

Déchargement

L'événement Unload est déclenché une fois la page entièrement rendue, envoyée au client et prête à être ignorée. À ce stade, les propriétés de la page comme Response et Request sont déchargées et un nettoyage est exécuté.

À chaque étape du cycle de vie d'une page, celle-ci déclenche des événements que vous pouvez gérer pour exécuter votre code utilisateur. Pour les événements de contrôle, vous devez lier le gestionnaire d'événements à l'événement, soit de façon déclarative à l'aide d'attributs tels que onclick, soit dans le code.

Les pages prennent également en charge le rattachement automatique aux événements (AutoEventWireup), ce qui signifie qu'ASP.NET recherche les méthodes portant certains noms et les exécute automatiquement lorsque certains événements sont déclenchés. Si l'attribut AutoEventWireup de la directive @ Page est défini sur true, les événements Page sont automatiquement liés aux méthodes qui utilisent la convention d'affectation de noms Page_événement, comme Page_Load et Page_Init. Pour plus d'informations sur le rattachement automatique aux événements (AutoEventWireup), consultez Modèle d'événements du contrôle serveur Web ASP.NET.

Le tableau suivant répertorie les événements de cycle de vie de la page que vous utiliserez le plus souvent. Il existe davantage d'événements que ceux qui sont répertoriés ; toutefois, ils ne sont pas utilisés par la plupart des scénarios de traitement de page. Ils sont plutôt utilisés surtout par les contrôles serveur de la page ASP.NET pour s'initialiser et s'afficher. Si vous souhaitez écrire des contrôles serveur ASP.NET personnalisés, vous devez en savoir plus sur ces événements. Pour plus d'informations sur la création de contrôles personnalisés, consultez Développement de contrôles serveur ASP.NET personnalisés.

Événement Page

Utilisation courante

PreInit

Déclenché à l'issue de l'étape de démarrage et avant le début de l'étape d'initialisation.

Utilisez cet événement dans les cas suivants :

  • Vérifier la propriété IsPostBack pour déterminer si elle est traitée pour la première fois. Les propriétés IsCallback et IsCrossPagePostBack ont également été définies à ce stade.

  • Créer ou recréer des contrôles dynamiques.

  • Définir dynamiquement une page maître.

  • Définir la propriété Theme dynamiquement.

  • Lire ou définir des valeurs de propriétés de profil.

    RemarqueRemarque
    Si la demande est une publication, les valeurs des contrôles n'ont pas encore été restaurées à partir de l'état d'affichage.Si vous définissez une propriété du contrôle à ce stade, sa valeur peut être substituée dans l'événement suivant.

Init

Déclenché après que tous les contrôles ont été initialisés et tous les paramètres d'apparence ont été appliqués. L'événement Init de contrôles individuels se produit avant l'événement Init de la page.

Utilisez cet événement pour lire ou initialiser des propriétés de contrôle.

InitComplete

Déclenché à l'issue de l'étape d'initialisation de la page. Une seule opération a lieu entre les événements Init et InitComplete : le suivi des modifications de l'état d'affichage est activé. Le suivi de l'état d'affichage permet aux contrôles de rendre persistante toute valeur ajoutée par programmation à la collection ViewState. Jusqu'à ce que le suivi de l'état d'affichage soit activé, toutes les valeurs ajoutées à l'état d'affichage sont perdues lors des publications (postback). Les contrôles activent généralement le suivi de l'état d'affichage immédiatement après le déclenchement de leur événement Init.

Utilisez cet événement pour apporter des modifications que vous souhaitez rendre persistantes à l'état d'affichage après la prochaine publication (postback).

PreLoad

Déclenché après que la page a affiché l'état d'affichage pour elle-même et tous les contrôles et après qu'elle a traité les données de publication (postback) incluses avec l'instance de Request.

Load

L'objet Page appelle la méthode OnLoad sur l'objet Page, puis fait de même pour chaque contrôle enfant jusqu'à ce que la page et tous les contrôles soient chargés. L'événement Load de contrôles individuels se produit après l'événement Load de la page.

Utilisez la méthode d'événement OnLoad pour définir des propriétés dans les contrôles et établir des connexions de base de données.

Événements de contrôle

Utilisez ces événements pour gérer des événements de contrôle spécifiques, tels que l'événement Click d'un contrôle Button ou l'événement TextChanged d'un contrôle TextBox.

RemarqueRemarque
Dans une demande de publication, si la page contient des contrôles validateurs, vérifiez la propriété IsValid de la Page et des contrôles de validation avant d'exécuter tout traitement.

LoadComplete

Déclenché à la fin de l'étape de gestion des événements.

Utilisez cet événement pour les tâches qui requièrent que tous les autres contrôles de la page soient chargés.

PreRender

Déclenché après que l'objet Page a créé tous les contrôles requis pour restituer la page, notamment les contrôles enfants des contrôles composites. (Pour ce faire, l'objet Page appelle EnsureChildControls pour chaque contrôle et pour la page.)

L'objet Page déclenche l'événement PreRender sur l'objet Page, puis fait de même pour chaque contrôle enfant. L'événement PreRender de contrôles individuels se produit après l'événement PreRender de la page.

Utilisez cet événement pour apporter des modifications finales au contenu de la page ou à ses contrôles avant le début de l'étape de rendu.

PreRenderComplete

Déclenché après que chaque contrôle lié aux données dont la propriété DataSourceID est définie a appelé sa méthode DataBind. Pour plus d'informations, consultez Événements de liaison de données pour les contrôles liés aux données plus loin dans cette rubrique.

SaveStateComplete

Déclenché après que l'état d'affichage et l'état du contrôle ont été enregistrés pour la page et pour tous les contrôles. À ce stade, toute modification de la page ou des contrôles affecte le rendu, mais aucune n'est récupérée dans la publication (postback) suivante.

Render

Il ne s'agit pas d'un événement ; au lieu de cela, l'objet Page appelle cette méthode sur chaque contrôle à ce stade du traitement. Tous les contrôles serveur Web ASP.NET ont une méthode Render qui écrit le balisage du contrôle à envoyer au navigateur.

Si vous créez un contrôle personnalisé, vous substituez en général cette méthode pour renvoyer le balisage du contrôle. Toutefois, si votre contrôle personnalisé incorpore uniquement des contrôles serveur Web ASP.NET standard et aucun balisage personnalisé, vous n'avez pas besoin de substituer la méthode Render. Pour plus d'informations, consultez Développement de contrôles serveur ASP.NET personnalisés.

Un contrôle utilisateur (un fichier .ascx) incorporant automatiquement le rendu, vous n'avez pas besoin de restituer explicitement le contrôle dans le code.

Unload

Déclenché pour chaque contrôle puis pour la page.

Dans les contrôles, utilisez cet événement pour effectuer un dernier nettoyage pour des contrôles spécifiques, par exemple la fermeture des connexions de base de données spécifiques aux contrôles.

Pour la page elle-même, utilisez cet événement pour effectuer un dernier nettoyage, par exemple la fermeture des connexions de base de données et des fichiers ouverts, ou la fin de journalisation ou d'autres tâches spécifiques à la demande.

RemarqueRemarque
Pendant l'étape de déchargement, la page et ses contrôles ont été rendus. Vous ne pouvez donc pas apporter de modifications supplémentaires au flux de réponse.Si vous essayez d'appeler une méthode telle que la méthode Response.Write, la page lèvera une exception.

Les contrôles serveur ASP.NET ont leur propre cycle de vie, semblable au cycle de vie d'une page. Par exemple, les événements Init et Load d'un contrôle se produisent au cours des événements de page correspondants.

Même si Init et Load se produisent de manière récursive sur chaque contrôle, ils surviennent dans l'ordre inverse. L'événement Init (et également l'événement Unload) pour chaque contrôle enfant se produit avant que l'événement correspondant ne soit déclenché pour son conteneur (de bas en haut). Toutefois, l'événement Load pour un conteneur se produit avant les événements Load pour ses contrôles enfants (de haut en bas). Les pages maîtres se comportent comme les contrôles enfants d'une page : l'événement Init de la page maître se produit avant les événements Init et Load de la page, et l'événement Load de la page la maître se produit après les événements Init et Load de la page.

Lorsque vous créez une classe qui hérite de la classe Page, vous pouvez non seulement gérer les événements déclenchés par la page, mais aussi ignorer les méthodes de la classe de base de la page. Par exemple, vous pouvez substituer la méthode InitializeCulture de la page pour définir dynamiquement des informations de culture. Notez que lorsqu'un gestionnaire d'événements est créé à l'aide de la syntaxe Page_événement, l'implémentation de base est implicitement appelée ; vous n'avez donc pas besoin de l'appeler dans votre méthode. Par exemple, la méthode OnLoad de la classe de la page de base est toujours appelée, que vous ayez ou non créé une méthode Page_Load. Cependant, si vous substituez la méthode OnLoad de la page avec le mot clé override (Overrides en Visual Basic), vous devez appeler explicitement la méthode de base. Par exemple, si vous substituez la méthode OnLoad dans la page, vous devez appeler base.Load (MyBase.Load en Visual Basic) pour pouvoir exécuter l'implémentation de base.

L'illustration suivante indique quelques-unes des méthodes les plus importantes de la classe Page que vous pouvez ignorer de manière à ajouter du code qui s'exécute à des stades spécifiques dans le cycle de vie de la page. Pour obtenir une liste complète d'événements et de méthodes de page, consultez la classe Page. Cette illustration indique également les relations de ces méthodes avec les événements de page et les événements de contrôle. La séquence de méthodes et d'événements de cette illustration se lit de haut en bas et les lignes se lisent de gauche à droite.

Diagramme du cycle de vie de la page ASP.NET

Si les contrôles sont créés dynamiquement au moment de l'exécution ou de façon déclarative dans des modèles de contrôles liés aux données, initialement, leurs événements ne sont pas synchronisés avec ceux des autres contrôles de la page. Par exemple, pour un contrôle qui est ajouté au moment de l'exécution, les événements Init et Load peuvent se produire plus tard dans le cycle de vie de la page que les mêmes événements pour les contrôles créés de façon déclarative. Par conséquent, à partir du moment où ils sont instanciés, les contrôles ajoutés de façon dynamique et ceux des modèles déclenchent leurs événements l'un après l'autre jusqu'à ce qu'ils soient au niveau de l'événement pendant lequel ils ont été ajoutés à la collection Controls.

Pour vous aider à comprendre la relation entre le cycle de vie de la page et les événements de liaison de données, le tableau suivant répertorie les événements liés aux données dans les contrôles liés aux données, tels que les contrôles GridView, DetailsView et FormView.

Événement de contrôle

Utilisation courante

DataBinding

Déclenché après l'événement PreRender du contrôle, qui se produit après l'événement PreRender de la page. (Cela s'applique aux contrôles dont la propriété DataSourceID est définie de façon déclarative. Sinon, cet événement se déclenche lorsque vous appelez la méthode DataBind du contrôle.)

Cet événement marque le début du processus qui lie le contrôle aux données. Utilisez cet événement pour ouvrir manuellement des connexions de base de données, si nécessaire, et pour définir dynamiquement des valeurs de paramètre avant exécution d'une requête.

RowCreated (GridView uniquement) ou ItemCreated (contrôles DataList, DetailsView, SiteMapPath, DataGrid, FormView, Repeater et ListView)

Déclenché après l'événement DataBinding du contrôle.

Utilisez cet événement pour manipuler le contenu indépendant de la liaison de données. Par exemple, vous pouvez ajouter par programmation la mise en forme à un en-tête ou une ligne de pied de page dans un contrôle GridView au moment de l'exécution.

RowDataBound (GridView uniquement) ou ItemDataBound (contrôles DataList, SiteMapPath, DataGrid, Repeater et ListView)

Déclenché après l'événement RowCreated ou ItemCreated du contrôle.

Lorsque cet événement se produit, les données étant disponibles dans la ligne ou l'élément, vous pouvez mettre en forme des données ou définir la propriété FilterExpression sur les contrôles de source de données enfants pour afficher les données associées dans la ligne ou l'élément.

DataBound

Déclenché à la fin des opérations de liaison de données dans un contrôle lié aux données. Dans un contrôle GridView, la liaison de données est terminée pour toutes les lignes et tous les contrôles enfants.

Utilisez cet événement pour mettre en forme le contenu lié aux données ou initialiser la liaison de données dans d'autres contrôles qui dépendent des valeurs du contenu du contrôle actuel. (Pour plus d'informations, consultez Événements de rattrapage pour les contrôles ajoutés plus haut dans cette rubrique.)

Contrôles liés aux données imbriqués

Si un contrôle enfant a été lié aux données, mais que son contrôle conteneur n'a pas encore été lié aux données, les données dans le contrôle enfant et les données dans son contrôle conteneur peuvent être mal synchronisées. Tel est notamment le cas si les données dans le contrôle enfant exécutent le traitement selon une valeur liée aux données dans le contrôle conteneur.

Par exemple, supposez que vous avez un contrôle GridView qui affiche un enregistrement de société sur chaque ligne avec une liste des responsables de société dans un contrôle ListBox. Pour remplir la liste des responsables, vous liez le contrôle ListBox à un contrôle de source de données (tel que SqlDataSource) qui récupère les données du responsable de la société à l'aide des informations l'ID de la société dans une requête.

Si les propriétés de liaison de données du contrôle ListBox, telles que DataSourceID et DataMember, sont définies de façon déclarative, le contrôle ListBox essaiera de créer une liaison à sa source de données pendant l'événement DataBinding de la ligne conteneur. Toutefois, le champ CompanyID de la ligne ne contient pas de valeur jusqu'à ce que l'événement RowDataBound du contrôle GridView se produise. Dans ce cas, le contrôle enfant (le contrôle ListBox) étant lié avant le contrôle conteneur (le contrôle GridView), leurs étapes de liaison de données sont mal synchronisées.

Pour éviter cette condition, placez le contrôle de source de données pour le contrôle ListBox dans le même élément de modèle que le contrôle ListBox lui-même et ne définissez pas de façon déclarative les propriétés de liaison de données du ListBox. À la place, définissez-les par programmation au moment de l'exécution pendant l'événement RowDataBound, afin que le contrôle ListBox ne soit pas lié à ses données tant que les informations CompanyID ne sont pas disponibles.

Pour plus d'informations, consultez Liaison à des données à l'aide d'un contrôle de source de données.

Le contrôle Login peut utiliser des paramètres du fichier Web.config pour gérer automatiquement l'authentification d'appartenance. Toutefois, si votre application vous demande de personnaliser le fonctionnement du contrôle ou si vous voulez comprendre comment les événements de contrôle Login se rapportent au cycle de vie de la page, vous pouvez utiliser les événements répertoriés dans le tableau suivant.

Événement de contrôle

Utilisation courante

LoggingIn

Déclenché pendant une publication (postback), après l'événement LoadComplete de la page. Cet événement marque le début du processus de connexion.

Utilisez cet événement pour les tâches qui doivent se produire avant le début du processus d'authentification.

Authenticate

Déclenché après l'événement LoggingIn.

Utilisez cet événement pour substituer ou améliorer le comportement d'authentification par défaut d'un contrôle Login.

LoggedIn

Déclenché après l'authentification du nom d'utilisateur et du mot de passe.

Utilisez cet événement pour rediriger vers une autre page ou définir de façon dynamique le texte dans le contrôle. Cet événement ne se produit pas en cas d'erreur ou d'échec de l'authentification.

LoginError

Déclenché si l'authentification n'a pas réussi.

Utilisez cet événement pour définir le texte dans le contrôle qui explique le problème ou diriger l'utilisateur vers une page différente.

Date

Historique

Motif

Mai 2011

Ajout d'une remarque relative à l'ordre des événements dans les pages maîtres.

Résolution des bogues de contenu.

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft