2009-08-25 15 views
5

base.OnLoad(e);'nın anlamını yanlış anlamış olabilirim. Anlayışım, bu ifadenin, çağrıldığı sınıfın temel sınıfının OnLoad yöntemini çağırmasıydı. Ancak, kodu ayıklamak için hata ayıklayıcısını kullandığımda farklı sonuçlar görüyorum.base.OnLoad (e) bir ASP.NET sayfasında

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

    SomeAbstractMethod(); 
    } 
} 

Ascx.cs beton sınıfında

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

base.OnLoad(e) üzerinde bir kesme noktası var. F11'e bastığımda (adım adım), hata ayıklayıcı beni MyUserControl'ün Page_Load'ine götürür, bu nedenle kontrol akışı şöyledir:

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

Birisi burada neler olduğunu açıklayabilir mi?

cevap

12
  1. BaseUC.Yükleme olayını tetikleyen Control.OnLoad çağrısı.
  2. Page_Load yöntemi, AutoEventWireUp = True nedeniyle çalışır ve Load olayı yürütüldüğünde yürütülür. Daha sonra BaseUC, SomeAbstractMethod öğesini çağırarak yürütmeye devam edecektir.
+0

"BaseUC.Onload, Load olayını tetikleyen Control.OnLoad çağrıları." hangi hat bunu yapıyor? – DotnetDude

+0

base.OnLoad (e) - oradaki kod etkinliği yükseltecektir. –

+0

Sanırım anlamadığım kısım bu. Neden base.OnLoad (e) Control.OnLoad öğesini çağırır (bu durumda MyUserControl.Page_Load() )? – DotnetDude

5

Page_Load ve OnLoad

Page_Load ASP.net çalışma zamanı tarafından çağrılan sayfada var olan bir yöntemdir) = farklı şeylerdir (AutoEventWireup) OnLoad sihirli sayesinde yükseltir yöntemdir Yük olay, önce base.OnLoad (e) kodu koyarak böylece kod olayı oluşturulur sonra çalıştırmak için kod için burayla, olay öncesinde ortaya atılan yürütmek neden olabilir diyoruz.

daha geniş bir açıklama biraz bu konuda weblogs.asp.net üzerinde Sonsuzluklar Döngü girmesinden itibaren this blog entry bir göz atın.

0

System.Web için hata ayıklama simgelerine sahip misiniz? F11, yüklemediğin kodun içine girmeyecek.

+0

-1 kesinlikle burada neler olup bittiğini değil ... Diğer cevaplar doğru fikre sahip – LorenVS

+1

Problemin en belirgin kısmı bu. OP, BCL ... 'daki bir yönteme adım atmaya çalışıyor. Diğer posterler, Page_Load çağrısı hakkında kesinlikle doğrudur, ancak hata ayıklayıcısının da ne yaptığını anlamak önemlidir. –

+1

System.Web'ye adım atmak, Load olayının tetiklenmesini ve Page_Load'ın bunun üzerinde tepki göstereceğini gösterir. – sisve

2

Merakla, ne görmeyi bekliyorsunuz? Bu noktada temel sınıfınız System.Web.UI.UserControl olduğundan ve bu bir sistem sınıfı olan base.OnLoad (e) için adım göreceğinizi düşünmüyorum. Bu yüzden büyük olasılıkla bunun içine girebilmek için kaynak kodunuz yoktur.

+1

Beklediğim: BaseUC.OnLoad() BaseUC.SomeAbstractMethod() MyUserControl.Page_Load() – DotnetDude

İlgili konular