2009-08-25 4 views
5

ich die Bedeutung von base.OnLoad(e); Mein Verständnis falsch verstanden haben könnte, war, dass diese Erklärung der OnLoad-Methode der Basisklasse der Klasse nennen, woher es genannt wird. Wenn ich jedoch den Debugger verwende, um den Code zu durchlaufen, sehe ich andere Ergebnisse.base.OnLoad (e) in einer ASP.NET-Seite

public abstract class BaseUC : System.Web.UI.UserControl 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
    base.OnLoad(e); 

    SomeAbstractMethod(); 
    } 
} 

Im ascx.cs konkreten Klasse

public partial class MyUserControl : BaseUC 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     //On Load logic 
    } 
} 

Ich habe einen Haltepunkt auf base.OnLoad(e). Wenn ich F11 drücken (Schritt in), nimmt der Debugger mich Page_Load von MyUserControl, so dass der Ablauf der Steuerung ist:

BaseUC.OnLoad() 
MyUserControl.Page_Load() 
BaseUC.SomeAbstractMethod() 

Kann jemand erklären, was hier vor sich geht?

Antwort

12
  1. BaseUC.Onload ruft Control.OnLoad auf, das das Load-Ereignis auslöst.
  2. Die Page_Load-Methode funktioniert aufgrund von AutoEventWireUp = True und wird ausgeführt, wenn das Load-Ereignis ausgeführt wird.
  3. BaseUC wird dann die Ausführung fortsetzen und SomeAbstractMethod aufrufen.
+0

"BaseUC.Onload ruft Control.OnLoad auf, das das Load-Ereignis auslöst." Welche Linie macht das möglich? – DotnetDude

+0

base.OnLoad (e) - der Code dort wird das Ereignis auslösen. –

+0

Ich denke, das ist der Teil, den ich nicht verstehe. Warum ruft base.OnLoad (e) die Control.OnLoad (in diesem Fall die MyUserControl.Page_Load() )? – DotnetDude

5

Page_Load und OnLoad sind verschiedene Dinge =)

Page_Load ist ein Verfahren, das auf der Seite vorhanden ist, die von der ASP.net-Laufzeit (dank der Magie des AutoEventWireup) OnLoad aufgerufen wird, ist die Methode, wirft die Veranstaltung laden, so durch den Code vor die base.OnLoad (e) setzen rufen Sie Code führen kann vor der Veranstaltung angehoben, nachdem es für Code auszuführen laufen nach das Ereignis ausgelöst wird.

Werfen Sie einen Blick auf this blog entry von Infinities Loop-Eintrag auf weblogs.asp.net dazu für ein bisschen eine breitere Erklärung.

0

Haben Sie die Debug-Symbole für System.Web geladen? F11 springt nicht in Code, den Sie nicht geladen haben.

+0

-1 definitiv nicht was hier los ist ... Andere Antworten haben die richtige Idee – LorenVS

+1

Es ist der offensichtlichste Teil des Problems. Das OP versucht, in eine Methode im BCL zu treten ... Die anderen Poster sind absolut korrekt über den Aufruf von Page_Load, aber es ist wichtig zu verstehen, was der Debugger auch tut. –

+1

Die Möglichkeit, in System.Web zu wechseln, hätte das Auslösen des Load-Ereignisses ausgelöst und darauf reagiert Page_Load. – sisve

2

Neugierig, was erwarten Sie zu sehen? Ich glaube nicht, dass Sie es Schritt zu base.OnLoad (e) sehen, da Ihre Basisklasse an diesem Punkt ist System.Web.UI.UserControl, und das ist eine Systemklasse, ... Sie haben also höchstwahrscheinlich nicht den Quellcode, um darauf zugreifen zu können.

+1

Ich erwartete: BaseUC.OnLoad() BaseUC.SomeAbstractMethod() MyUserControl.Page_Load() – DotnetDude