55 votes

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 discordants.

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

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

62voto

Cerebrus Points 18045

Lorsqu'une Page est demandée, il soulève les différents événements qui sont considérés comme faisant partie de son cycle de vie. - Je garder la représentation visuelle créée par Peter Bromberg pratique avec moi.

L' AutoEventWireUp de la propriété lorsque la valeur est True, automatiquement fils et quelques-uns de ces événements dans la Page cycle de vie de leurs maîtres. Cela signifie que vous ne devez pas explicitement joindre ces événements (en utilisant le mot clé Handles, par exemple, en VB).

Des exemples de ces événements serait Page_Init et Page_Load.

Si vous définissez AutoEventWireUp de Vrai et explicite de câblage des gestionnaires d'événements, vous les trouverez en étant exécutée deux fois! C'est une des raisons pourquoi Visual Studio conserve cet attribut false par défaut.

Edit: (après Chester89 du commentaire)


Il est utile de noter que la valeur par défaut de l' AutoEventWireUp attribut de la Page est - true, tandis que la valeur par défaut de l' AutoEventWireUp de la propriété de la classe de la Page est - false

27voto

Simon Svensson Points 11667

Pour ajouter à la réponse à la question précédente; automatique crochets sont appliquées dans l' TemplateControl.HookUpAutomaticHandlers. Cette méthode appelle en TemplateControl.GetDelegateInformationWithNoAssert qui contient les méthodes qui sont considérés comme des gestionnaires d'événements.

Ce sont, dans le Système.Web, la version 2.0:

  • Sur toutes les classes dérivant 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.`

  • Support de Transaction pour toutes les classes dérivant de TemplateControl:

    • Page_AbortTransaction, ou si elle n'existe pas, OnTransactionAbort
    • Page_CommitTransaction, ou si elle n'existe pas, OnTransactionCommit

Système.Web, la version 4.0 a introduit un Page_PreRenderCompleteAsync pour toutes les classes dérivées à partir de la Page. Cette méthode, si elle existe, sera enregistrée à l'aide de la Page.RegisterAsyncTask et exécuté automatiquement ", juste avant la PreRenderComplete l'événement" (source: Page.ExecuteRegisteredAsyncTasks). Cette méthode semble très sans-papiers qui suggèrent qu'il serait préférable d'suffit d'appeler la Page.RegisterAsyncTask avec votre propre méthode à la place.

11voto

eglasius Points 26221

Comme mentionné dans l'article, si vous avez AutoEventWireUp allumé, asp.net reconnaît automatiquement que vous avez une méthode avec le page_load de la syntaxe et de l'appeler automatiquement:

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

Cela vous donne un nettoyeur de code derrière, au détriment de certains (très) faible surcharge. Notez que si vous ne spécifiez pas, vous devez indiquer de façon explicite asp.net vous souhaitez gérer le chargement de la page de l'événement:

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

Notez que cela s'applique à d'autres événements de la page, car il utilise une convention de nommage que *Page_Event*.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X