2009-08-25 7 views
5

może ja źle zrozumieć sens base.OnLoad(e); mojego zrozumienia, że ​​to oświadczenie będzie wywołać metodę onload klasy bazowej klasy gdzie jest wywołana z. Jednak, gdy używam debuggera do przejrzenia kodu, widzę różne wyniki.base.OnLoad (e) na stronie ASP.NET

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

    SomeAbstractMethod(); 
    } 
} 

W ascx.cs betonu klasy

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

Mam przerwania na base.OnLoad(e). Po naciśnięciu klawisza F11 (krok do), debugger zabiera mnie do Page_Load z MyUserControl, więc przepływ kontroli jest:

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

Może ktoś wyjaśnić, co tu się dzieje?

Odpowiedz

12
  1. BaseUC.Onload wywołania Control.OnLoad, które wyzwala zdarzenie Load.
  2. Metoda Page_Load działa z powodu AutoEventWireUp = True i jest wykonywana po wykonaniu zdarzenia Load.
  3. BaseUC następnie kontynuuje wykonywanie, wywołując SomeAbstractMethod.
+0

"BaseUC.Onload wzywa Control.OnLoad która wyzwala zdarzenie Load." która linia to robi? – DotnetDude

+0

base.OnLoad (e) - kod podniesie wydarzenie. –

+0

Sądzę, że to część, której nie rozumiem. Dlaczego baza.OnLoad (e) wywołuje Control.OnLoad (w tym przypadku MyUserControl.Page_Load() )? – DotnetDude

5

Page_Load i OnLoad są różne rzeczy =)

Page_Load jest metodą, która istnieje na stronie, która jest wywoływana przez program ASP.NET (dzięki magii AutoEventWireup) onload jest metoda, która podnosi zdarzenie obciążenia, więc przez wprowadzenie kodu przed się base.OnLoad (e) nazwać można wywoływać kod do wykonania przed rozpoczęciem imprezy jest podniesiony, po nim na uruchomienie kodu po zdarzenie jest podniesiony.

Spójrz na this blog entry z wpisu Infinities Loop na stronie weblogs.asp.net, aby uzyskać nieco szersze wyjaśnienie.

0

Czy masz symbole debugowania załadowane do system.Web? F11 nie przejdzie do kodu, który nie został załadowany.

+0

-1 zdecydowanie nie o to tu chodzi ... Inne odpowiedzi miały dobry pomysł – LorenVS

+1

To najbardziej oczywista część problemu. OP próbuje wejść do metody w BCL ... Pozostałe plakaty są całkowicie poprawne w związku z wywołaniem Page_Load, ale ważne jest, aby zrozumieć, co robi też debugger. –

+1

Będąc w stanie wejść do System.Web, pokazałbym zwolnienie zdarzenia Load, a Page_Load na nim zareaguje. – sisve

2

ciekawe, co pan spodziewa się zobaczyć? Nie sądzę, aby zobaczyłeś, że wkracza on do base.OnLoad (e), ponieważ twoja klasa bazowa w tym miejscu to System.Web.UI.UserControl, a to jest klasa systemowa, ... więc najprawdopodobniej nie masz kodu źródłowego, aby móc do niego wejść.

+1

Oczekiwano: BaseUC.OnLoad() BaseUC.SomeAbstractMethod() MyUserControl.Page_Load() – DotnetDude

Powiązane problemy