2013-02-23 6 views
4

J'utilise Visual Studio 2012 édition professionnelle. Je ne vois pas de différence sur la définition de "true" par rapport à "false" pour la propriété AutoEventWireup dans la directive page. Tout le temps, il se comporte comme "vrai", Signification - Je définis explicitement les événements "faux" et non contraignants, mais les événements sont implicitement liés. S'il vous plaît laissez-moi savoir si je manque quelque chose.AutoEventWireup True Vs False

Répondre

7

Ce paramètre ne concerne pas le déclenchement d'un événement, mais plutôt la liaison de gestionnaires aux événements de page standard. Comparez ces deux extraits qui illustrent la gestion de l'événement Load.

Tout d'abord, avec AutoEventWireup="true":

public class PageWithAutoEventWireup 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Page_Load is called"); 
    } 
} 

En second lieu, avec AutoEventWireup="false":

public class PageWithoutAutoEventWireup 
{ 
    overrie void OnInit(EventArgs e) 
    { 
     this.Load += Page_Load; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Response.Write("Page_Load is called"); 
    } 
} 

événement Load sera tiré par la page et gérée par votre code dans les deux cas. Mais dans le second cas, vous devez vous inscrire à l'événement explicitement, alors que dans le premier cas ASP.NET fait tout pour vous.

Bien sûr, la même chose pour d'autres événements la page du cycle de vie, comme Init, PreRender, etc.

+0

événements se sont binded implicitement même nous avons mis AutoEventWireup = "false". Signification - l'événement s'est inscrit implicitement sans le code suivant dans le second extrait. override void OnInit (EventArgs e) { this.Charger + = Page_Load; } – afin

+1

@afin, ça sonne bizarre. Pourriez-vous s'il vous plaît montrer votre code? – Andrei

+0

Désolé pour la confusion. J'ai mal lu votre réponse. Vous vouliez dire AutoEventWireup est seulement pour les événements de la page, il n'affectera pas d'autres événements tels que l'événement de changement des événements et des contrôles click.Signification - autres que les événements de page seront implicitement liés indépendamment de la valeur AutoEventWireup. Je peux bien? – afin

3

Je sais que c'est un vieux fil, mais je ne avais encore ajouter ce qui suit, ce qui m'a récemment aidé :

En plus de la réponse d'Andrei, il vaut la peine d'ajouter qu'en définissant AutoEventWireup sur "true", vous risquez d'appeler Page_Load() deux fois chaque fois que la page est chargée. Cela m'est arrivé. Il est expliqué en détail here, d'où je copiais les suivantes:

Ne réglez pas AutoEventWireup à true si la performance est une considération clé . Lorsque la mise en veille automatique des événements est activée, ASP.NET doit effectuer entre 15 et 30 tentatives pour faire correspondre les événements avec les méthodes.

Notez les points suivants au sujet des gestionnaires d'événements de liaison aux événements:

  • Si vous définissez AutoEventWireup sur true, assurez-vous que vous ne également connecter manuellement des gestionnaires d'événements page aux événements. Si vous le faites, les gestionnaires peuvent être appelés plusieurs fois.

  • La liaison automatique est effectuée uniquement pour les événements de page, et non pour les événements pour les contrôles sur la page.

  • Comme alternative aux événements de liaison aux gestionnaires, vous pouvez remplacer les méthodes Oneventname de la page ou des contrôles.

Questions connexes