2012-08-07 10 views
6

Wenn das Attribut AutoEventWireup auf false gesetzt ist, müssen die Ereignisse manuell verdrahtet werden. Jedoch kann ich nicht scheinen, die Page_PreInit zu feuern. Ich nehme an, dass ich die Leitung möglicherweise zu spät passieren lassen würde (sobald wir schon hinter Page_PreInit sind), aber ich bin mir nicht sicher, wo ich die Kabel anschließen sollte.Verkabeln des Ereignisses Page_PreInit manuell, wenn AutoEventWireup auf false gesetzt ist

Zum Beispiel ...

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e) 
    PreInit += new EventHandler(Page_PreInit); 
    Load += new EventHandler(Page_Load); 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    Response.Write("Page_PreInit event fired!<br>"); //this is never reached 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Write("Page_Load event fired!<br>"); 
} 

Der obige Code führt "gefeuert Ereignis Page Load!" angezeigt werden, aber nichts von . Ich probierte base.OnInit(e) sowohl vor als auch nach den Kabeln, und das hatte keine Wirkung.

Die Grafik here besagt, dass die OnInit Methode tatsächlich nach dem PreInit Ereignis kommt. In diesem Sinne habe ich versucht, zu überschreiben und das gleiche zu tun --- keine Wirkung.

Der MSDN-Artikel here sagt ausdrücklich, dass im Fall von AutoEventWireup Set false können die Ereignisse in einer überschriebenen OnInit verdrahtet werden. Das Beispiel, das sie verwenden, ist Page_Load, und natürlich funktioniert das genauso wie bei mir, aber sie sprechen nicht an, dass dies nicht für das Ereignis funktioniert.

Meine Frage ist: Wie kann ich das Page_PreInit Ereignis im Fall von AutoEventWireup-false gesetzt verdrahtet bekommen?

Ich verstehe, dass es Alternativen gibt, wie auf der MSDN page aufgeführt, wie die Verwendung des Konstruktors der Seite. Ich würde gerne genau wissen, wie man das mit OnInit vorschlägt.

+0

Du hast es in den Konstruktor zu tun oder vor dem Aufruf von 'base.OnInit'. – Strelok

+0

Leider hat das Einfügen der Zeilen über base.OnInit (e) keine Auswirkung und das Erreichen eines früheren Ereignisses (z. B. OnPreInit) wird das Page_PreInit-Ereignis nicht erreichen. – CptSupermrkt

Antwort

10

Die Basisimplementierung der Methode OnPreInit() ist verantwortlich für die Erhöhung des Ereignisses PreInit. Da Ihre Überschreibung diese Implementierung vor Ihren PreInit Handler anruft, wird es in der Tat nicht aufgerufen werden.

Versuchen Sie, die Basisklasse Methode nach Aufruf des Handlers Registrierung:

protected override void OnPreInit(EventArgs e) 
{ 
    PreInit += new EventHandler(Page_PreInit); 
    Load += new EventHandler(Page_Load); 

    // And only then: 
    base.OnPreInit(e); 
} 
+0

Ja, das ist es. Vielen Dank. – CptSupermrkt

+0

Es sollte beachtet werden, dass dieser Code "OnPreInit" anstelle von "OnInit" überschreibt. – Trisped

0

hinzufügen alle Ereignis in Initialisierungsbereich:

public WebName() 
     { 
     this.event+=TAB Key 
     } 
Verwandte Themen