При создании веб-элемента управления вы должны переопределить OnLoad или реализовать Page_Load - PullRequest
9 голосов
/ 29 сентября 2008

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

Ответы [ 8 ]

5 голосов
/ 29 сентября 2008

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

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

3 голосов
/ 29 сентября 2008

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

3 голосов
/ 29 сентября 2008

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

2 голосов
/ 02 октября 2014

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

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

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

2 голосов
/ 29 сентября 2008

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

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

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

0 голосов
/ 16 октября 2008

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

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

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

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

0 голосов
/ 29 сентября 2008

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

0 голосов
/ 29 сентября 2008

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

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

...