Когда вы создаете новый пользовательский веб-элемент управления в Visual Studio, он по умолчанию добавляет событие Page_Load. В чем преимущество использования этого вместо переопределения базового события OnLoad
в элементе управления? Просто событие Page_Load
запускается до OnLoad
?
При создании веб-элемента управления следует переопределить OnLoad или реализовать Page_Load
Ответы (8)
Метод OnLoad
должен быть местом, где возникает событие Load
. Я лично всегда пытаюсь обработать событие, если мне не нужно выполнять дополнительную обработку при его возникновении.
Я рекомендую обработать само событие при нормальных обстоятельствах.
Вы можете найти эту статью о жизненном цикле страницы от Microsoft полезной.
Как вы можете видеть выше, это в основном сводится к личному выбору, ЕСЛИ этот выбор сделан со знанием дела. Лучший быстрый, но основательный обзор, который я видел, находится на http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx
На самом деле это просто вопрос выбора. Мне кажется странным, что объект прикрепляет событие к самому себе, особенно когда есть метод, который вы можете переопределить.
Я думаю, что команда ASP.NET использовала события, потому что это была модель Global.asa в ASP, и чтобы снизить планку для разработчиков, которые не понимают наследование и переопределение виртуальных методов.
Переопределение метода требует дополнительных знаний о жизненном цикле страницы, но в этом нет ничего «неправильного».
Прочтите раздел под названием: «События страницы привязки» на странице MSDN под названием: «Модель событий веб-серверного элемента управления ASP.NET» (ссылка на страницу) Есть несколько полезных утверждений, подобных этим:
Одним из недостатков атрибута AutoEventWireup является то, что он требует, чтобы обработчики событий страницы имели конкретные предсказуемые имена. Это ограничивает вашу гибкость в том, как вы называете обработчики событий. Другой недостаток заключается в том, что снижается производительность, поскольку ASP.NET ищет методы во время выполнения. Для веб-сайта с большим объемом трафика влияние на производительность может быть значительным.
(Флаг AutoEventWireup включает такие методы, как Page_Load)
Несмотря на то, что вы наследуете от UserControl
, я думаю, вам следует избегать переопределения защищенных методов, если вам это не нужно. Page_Load
нужен для того, чтобы вам было проще добавить код, специфичный для вашего UserControl
.
Переопределите OnLoad
только в том случае, если вам нужен абсолютный контроль над тем, когда (/ если) запускается событие Load
(что должно быть редко, IMO).
я думаю это то же самое. ИМХО, с событиями у вас есть немного больше гибкости, потому что у вас может быть более одного слушателя для вашего события!
Я думаю, что в этих двух методах есть одно потенциально существенное различие.
Я имею в виду возможность контролировать последовательность выполнения.
Если вы переопределяете, вы знаете, когда произойдет загрузка базовых классов, потому что вы вызываете это. Это обеспечивает больший контроль, но, вероятно, это плохо, поскольку многие будут утверждать.
Если вы используете событие, у вас нет гарантии в отношении порядка звонка. Это заставляет вас писать событие Load, которое не должно зависеть от того, что суперклассы делают во время фазы загрузки. Я думаю, что это был бы предпочтительный подход, и, возможно, именно поэтому VS автоматически сгенерировал код таким образом.