Kolejność metody wirtualnego (OnLoad) i obsługi zdarzeń (page_load) nazywane jest określona przez tzw page lifecycle. Jest to po prostu sposób w jaki środowisko wykonawcze ASP.NET przetwarza przychodzące żądanie (np. Z etapami Init, Load, Render).
Można użyć onload lub Page_Load, ale trzeba zdawać sobie sprawę z tego, co się dzieje:
- wewnątrz onload trzeba zadzwonić base.OnLoad
- wewnątrz base.OnLoad zdarzenie obciążenia zostaną podniesione
- Page_Load jest programem obsługi zdarzenia Load (które jest automatycznie łączone) i dlatego będzie wywoływany w wyniku wywołanego zdarzenia Load.
Jeśli nie zadzwonisz pod numer base.OnLoad w trybie nadpisania OnLoad, wówczas zdarzenie Load nie zostanie wywołane.
Aktualizacja: można użyć pustą stronę z następującego kodu z opóźnieniem, aby zobaczyć co się dzieje:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
base.Load += new EventHandler(My_Page_Load);
}
void My_Page_Load(object sender, EventArgs e)
{
Response.Write("My_Page_Load<br/>");
}
protected override void OnLoad(EventArgs e)
{
Response.Write("Start of OnLoad<br/>");
base.OnLoad(e);
Response.Write("End of OnLoad<br/>");
}
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Page_Load<br/>");
}
Spróbuj komentując base.OnLoad (e) połączenie i zobaczyć ponownie.
czy obejmuje to również kontrolę z identyfikatorami? Czy możesz napisać MyButton_Click? –
Dlaczego zalecenie wyłączania AutoEventWireup? – M4N
@Martin: Generacja delegatów do powiązywania odbywa się w czasie wykonywania i jest wolniejsza niż tylko przesłonięcie metody. @ Orion: nie obejmuje kliknięć przycisków i takie, ale proces jest podobny.Aby metoda taka jak "MyButton_Click" działała bez konieczności jawnego tworzenia procedury obsługi zdarzeń, musisz ustawić atrybut 'OnClick' na formancie w pliku aspx, tak jak poniżej:' OnClick = "MyButton_Click" '. Spowoduje to, że program ASP.NET utworzy dla Ciebie delegata przycisku kliknięcia i doda go do zdarzenia 'Click' przycisku. –