base.OnLoad (e) на странице ASP.NET - PullRequest
5 голосов
/ 25 августа 2009

Возможно, я неправильно понял значение base.OnLoad(e); Насколько я понимаю, это утверждение вызовет метод OnLoad базового класса того класса, откуда он вызывается. Однако, когда я использую отладчик для пошагового выполнения кода, я вижу разные результаты.

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 (шаг в), отладчик переводит меня на Page_Load MyUserControl, поэтому поток управления:

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

Может кто-нибудь объяснить, что здесь происходит?

Ответы [ 4 ]

12 голосов
/ 25 августа 2009
  1. BaseUC.Onload вызывает Control.OnLoad, который вызывает событие Load.
  2. Метод Page_Load работает благодаря AutoEventWireUp = True и выполняется при выполнении события Load.
  3. Затем BaseUC продолжит выполнение, вызвав SomeAbstractMethod.
5 голосов
/ 25 августа 2009

Page_Load и OnLoad - разные вещи =)

Page_Load - это метод, существующий на странице, который вызывается средой выполнения ASP.net (благодаря волшебству AutoEventWireUp). OnLoad - это метод, который вызывает событие Load, поэтому, поместив код перед вызов base.OnLoad (e) позволяет запустить код до возникновения события, после - для кода, выполняемого после событие вызывается.

Посмотрите на эту запись в блоге из записи Infinities Loop на weblogs.asp.net об этом, чтобы получить более широкое объяснение.

2 голосов
/ 25 августа 2009

Любопытно, что вы ожидаете увидеть? Я не думаю, что вы увидите, что это шаг к base.OnLoad (e) , так как ваш базовый класс в этот момент - System.Web.UI.UserControl , и это это системный класс, ... поэтому у вас, скорее всего, нет исходного кода, чтобы можно было в него войти.

0 голосов
/ 25 августа 2009

У вас есть отладочные символы, загруженные для System.Web? F11 не вступит в код, который вы не загрузили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...