При создании веб-элемента управления следует переопределить OnLoad или реализовать Page_Load

Когда вы создаете новый пользовательский веб-элемент управления в Visual Studio, он по умолчанию добавляет событие Page_Load. В чем преимущество использования этого вместо переопределения базового события OnLoad в элементе управления? Просто событие Page_Load запускается до OnLoad?


person Glenn Slaven    schedule 28.09.2008    source источник


Ответы (8)


Метод OnLoad должен быть местом, где возникает событие Load. Я лично всегда пытаюсь обработать событие, если мне не нужно выполнять дополнительную обработку при его возникновении.

Я рекомендую обработать само событие при нормальных обстоятельствах.

person Adrian Clark    schedule 29.09.2008

Вы можете найти эту статью о жизненном цикле страницы от Microsoft полезной.

person Matt Hanson    schedule 29.09.2008
comment
согласился - я считаю, что важно хорошо понимать весь жизненный цикл. - person Samuel Kim; 16.10.2008

Как вы можете видеть выше, это в основном сводится к личному выбору, ЕСЛИ этот выбор сделан со знанием дела. Лучший быстрый, но основательный обзор, который я видел, находится на http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx

person Ted    schedule 29.09.2008

На самом деле это просто вопрос выбора. Мне кажется странным, что объект прикрепляет событие к самому себе, особенно когда есть метод, который вы можете переопределить.

Я думаю, что команда ASP.NET использовала события, потому что это была модель Global.asa в ASP, и чтобы снизить планку для разработчиков, которые не понимают наследование и переопределение виртуальных методов.

Переопределение метода требует дополнительных знаний о жизненном цикле страницы, но в этом нет ничего «неправильного».

person Brannon    schedule 29.09.2008

Прочтите раздел под названием: «События страницы привязки» на странице MSDN под названием: «Модель событий веб-серверного элемента управления ASP.NET» (ссылка на страницу) Есть несколько полезных утверждений, подобных этим:

Одним из недостатков атрибута AutoEventWireup является то, что он требует, чтобы обработчики событий страницы имели конкретные предсказуемые имена. Это ограничивает вашу гибкость в том, как вы называете обработчики событий. Другой недостаток заключается в том, что снижается производительность, поскольку ASP.NET ищет методы во время выполнения. Для веб-сайта с большим объемом трафика влияние на производительность может быть значительным.

(Флаг AutoEventWireup включает такие методы, как Page_Load)

person Bronek    schedule 02.10.2014

Несмотря на то, что вы наследуете от UserControl, я думаю, вам следует избегать переопределения защищенных методов, если вам это не нужно. Page_Load нужен для того, чтобы вам было проще добавить код, специфичный для вашего UserControl.

Переопределите OnLoad только в том случае, если вам нужен абсолютный контроль над тем, когда (/ если) запускается событие Load (что должно быть редко, IMO).

person Christoffer Lette    schedule 29.09.2008

я думаю это то же самое. ИМХО, с событиями у вас есть немного больше гибкости, потому что у вас может быть более одного слушателя для вашего события!

person stefano m    schedule 29.09.2008

Я думаю, что в этих двух методах есть одно потенциально существенное различие.

Я имею в виду возможность контролировать последовательность выполнения.

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

Если вы используете событие, у вас нет гарантии в отношении порядка звонка. Это заставляет вас писать событие Load, которое не должно зависеть от того, что суперклассы делают во время фазы загрузки. Я думаю, что это был бы предпочтительный подход, и, возможно, именно поэтому VS автоматически сгенерировал код таким образом.

person Samuel Kim    schedule 16.10.2008