2009-08-25 11 views
5

base.OnLoad(e);の意味が誤解されている可能性があります。このステートメントは、呼び出されたクラスの基本クラスのOnLoadメソッドを呼び出すことを理解しました。ただし、デバッガを使用してコードをステップ実行すると、結果が異なることがあります。ASP.NETページ内のOnLoad(e)

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

    SomeAbstractMethod(); 
    } 
} 
ascx.cs具象クラスで

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

私はbase.OnLoad(e)にブレークポイントを持っています。私は(にステップ)F11を押すと、デバッガは、MyUserControlのPage_Loadに私を取るので、制御の流れは以下のとおりです。

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

誰かがここで何が起こっているのか説明できますか?

答えて

12
  1. BaseUC.Onloadは、LoadイベントをトリガーするControl.OnLoadを呼び出します。
  2. Page_Loadメソッドは、AutoEventWireUp = Trueのために機能し、Loadイベントが実行されたときに実行されます。
  3. BaseUCはSomeAbstractMethodを呼び出して実行を継続します。
+0

"BaseUC.OnloadはLoadイベントをトリガーするControl.OnLoadを呼び出します。"どのラインがこれを起こしているのですか? – DotnetDude

+0

base.OnLoad(e) - そこのコードがイベントを発生させます。 –

+0

私はそれが私が理解していない部分だと思います。なぜbase.OnLoad(e)はControl.OnLoad(この場合はMyUserControl.Page_Load() )を呼び出しますか? – DotnetDude

5

をPage_Loadと読み込み時は

をPage_LoadはASP.netランタイムによって呼び出されたページ上に存在する方法である)=異なるものです(AutoEventWireup属性)読み込み時の魔法のおかげで上げる方法であり、 Loadイベントであるため、コードの前に置くことによって、イベントが発生する前にコードが実行され、コードがの後に実行され、の後にイベントが発生します。

詳細については、weblogs.asp.netのInfinities Loopのthis blog entryをご覧ください。

0

System.Web用に読み込まれたデバッグシンボルはありますか? F11はあなたがロードしていないコードにステップインしません。

+0

-1ここに何が起こっているのかはっきりしていません...他の答えは正しい考えを持っています – LorenVS

+1

これは問題の最も明白な部分です。 OPはBCLのメソッドにステップインしようとしています... 他のポスターはPage_Loadの呼び出しに関して絶対に正しいですが、デバッガが何をしているのかを理解することも重要です。 –

+1

System.Webにステップインできると、Loadイベントが発生し、そのPage_Loadが応答します。 – sisve

2

奇妙なことに、あなたは何を見たいですか?私はbase.OnLoad(e)にステップインしているとは思えません。その時点の基底クラスはSystem.Web.UI.UserControlであり、それはシステムクラスです。だからあなたはそれに入ることができるためのソースコードを持っていない可能性が非常に高いです。

+1

期待通り: BaseUC.OnLoad() BaseUC.SomeAbstractMethod() MyUserControl.Page_Load() – DotnetDude

関連する問題