Que signifie la propriété de page AutoEventWireUp?

Je ne comprends pas ce que la propriété de page AutoEventWireUp est responsable.

En surfant sur le net, j’ai trouvé beaucoup de forums avec des discussions à ce sujet et ils me semblent tous différents.

Puis-je obtenir une explication claire de ce que cette propriété signifie exactement?

J’ai lu cet article , mais même je ne comprends pas.

Lorsqu’une page est demandée, elle déclenche divers événements considérés comme faisant partie de son cycle de vie . Je garde la représentation visuelle créée par Peter Bromberg avec moi.

La propriété AutoEventWireUp , lorsque True, connecte automatiquement certains de ces événements intégrés au cycle de vie de la page à leurs gestionnaires. Cela signifie que vous n’avez pas besoin d’attacher explicitement ces événements (à l’aide du mot clé Handles, par exemple, dans VB).

Les exemples de ces événements Page_Init seraient Page_Init et Page_Load .

Si vous définissez AutoEventWireUp sur True et fournissez un câblage explicite des EventHandlers, vous les trouverez exécutés deux fois! C’est l’une des raisons pour lesquelles Visual Studio garde cet atsortingbut défini sur false par défaut.

Edit: (après le commentaire de Chester89)


Il est utile de noter que la valeur par défaut de l’atsortingbut AutoEventWireUp de la page est true , tandis que la valeur par défaut de la propriété AutoEventWireUp de la classe Page est false

Ajouter aux réponses précédentes les crochets automatiques sont appliqués à partir de TemplateControl.HookUpAutomaticHandlers . Cette méthode appelle TemplateControl.GetDelegateInformationWithNoAssert qui contient les méthodes considérées comme des gestionnaires d’événements.

Ce sont, dans System.Web, version 2.0:

  • Sur toutes les classes dérivées de la page: Page_PreInit , Page_PreLoad , Page_LoadComplete , Page_PreRenderComplete , Page_InitComplete , Page_SaveStateComplete .

  • Sur toutes les classes dérivant de TemplateControl: Page_Init , Page_Load , Page_DataBind , Page_PreRender , Page_UnLoad , Page_Error .

  • Prise en charge des transactions pour toutes les classes dérivées de TemplateControl:

    • Page_AbortTransaction ou, s’il n’existe pas, OnTransactionAbort
    • Page_CommitTransaction ou, s’il n’existe pas, OnTransactionCommit

System.Web, version 4.0, a introduit un Page_PreRenderCompleteAsync pour toutes les classes dérivées de Page. Cette méthode, si elle est présente, sera enregistrée avec Page.RegisterAsyncTask et exécutée automatiquement “juste avant l’événement PreRenderComplete” (source: Page.ExecuteRegisteredAsyncTasks ). Cette méthode semble très peu documentée, ce qui suggère qu’il serait préférable d’appeler simplement Page.RegisterAsyncTask avec votre propre méthode.

Comme mentionné dans l’article, si AutoEventWireUp est activé, asp.net reconnaîtra automatiquement que vous avez une méthode avec la syntaxe page_load et l’appelle automatiquement:

 private void Page_Load(object sender, System.EventArgs e) { } 

Cela vous donne un code plus propre au désortingment de certains (très) petits frais généraux. Notez que si vous ne le spécifiez pas, vous devez indiquer explicitement à asp.net que vous souhaitez gérer l’événement de chargement de la page:

 this.Load += new System.EventHandler(this.Page_Load); 

Notez que cela s’applique aux autres événements de la page, car elle utilise une convention de dénomination comme Page_Event .