Почему Visual Studio по умолчанию предоставляет вам Page_Load для веб-форм? - PullRequest
3 голосов
/ 16 января 2009

При создании новой WebForm Visual Studios создает обработчик Page_Load в коде по умолчанию, что круто. В течение многих лет я всегда помещал код для таких вещей, как установка свойств элементов управления в Page_Load. Недавно я использовал Reflector, чтобы посмотреть на некоторые сборки, написанные Microsoft, и увидел, что они поместили логику того же типа в метод OnLoad (который якобы вызывает событие load). Поэтому я начал задаваться вопросом, где лучше всего устанавливать свойства элементов управления в OnLoad или Page_Load? Или вообще другим способом? И если не Page_Load, почему Studio добавляет это в код позади?

Моя последняя мысль: Хотя я знаю, что размещение логики в OnLoad работает нормально, я, вероятно, пока остановлюсь на Page_Load, потому что это условно. Я действительно задал вопрос, чтобы выяснить, упустил ли я что-то новое после того, как начал видеть OnLoad в коде других людей. Спасибо всем за вдумчивые ответы!

Ответы [ 5 ]

3 голосов
/ 16 января 2009

Page_Load - это просто автоматическое добавление событий для OnLoad. Вы могли бы подумать, что это не имеет никакого значения, который используется, но я согласен с K. Скотт Аллен из Ode to Code , который обычно отклоняется от нормы только тогда, когда вы пытаетесь сделать что-то неожиданное. Переопределение виртуального метода, такого как OnLoad, предполагает, что вы пытаетесь сделать что-то другое, например, не вызывать base.Onload, чего обычно не делает большинство программистов.

1 голос
/ 16 января 2009

Действительно, если вы вернетесь к плохим старым временам разработки ASP.Net 1.1, вы действительно увидите, как происходит подключение, созданное для вас на каждой странице:

    #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
        InitializeComponent();
        base.OnInit(e);
    }

    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    private void InitializeComponent()
    {    
        this.Load += new System.EventHandler(this.Page_Load);
    }
    #endregion

И время от времени я делал что-то, что заставляло VS удалять эту маленькую строку в InitializeComponent, и я не мог понять, почему моя страница перестала что-либо делать.

1 голос
/ 16 января 2009

Пока все очень действительные баллы. Но не позволяйте этим парням пугать вас. Вы ничего не повредите, если хотите использовать метод OnLoad. Только не забудьте вызвать base.OnLoad ().

1 голос
/ 16 января 2009

Как правило, методы OnX - это методы, которые вызывают событие X. Они вроде как внутренние обработчики событий класса. Это означает, что когда вы кодируете класс, который, помимо прочего, обнаруживает определенное событие, вы обычно вызываете метод, который: 1. выполняет то, что должен сделать ваш класс в этом случае, 2. запускает внешнее событие.

Я полагаю, что одна из основных причин, почему это завоевало популярность, заключалась в том, что в существующем состоянии вы не можете просто вызвать делегат события, чтобы вызвать событие, вы всегда должны проверять, является ли указанный делегат нулевым. Итак, вы хотите инкапсулировать эту проверку в методе.

Короче говоря, если вы не пишете свой собственный класс с событием Load, вам не нужно думать о методе OnLoad.

1 голос
/ 16 января 2009

Вы не хотите использовать OnLoad, потому что они используют его, потому что это обертка для вызова события Page_Load. Они вводят логику, потому что они не обрабатывают событие Page_Load.

Короче говоря, продолжайте использовать Page_Load.

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