Когда подключать обработчики событий asp.net

Допустим, у нас есть довольно стандартная форма с текстовым полем и кнопкой (для простоты). Вы хотите обработать событие Click и выполнить некоторые действия на основе пользовательского ввода.

Мне было интересно, имеет ли значение, когда именно вы подключаете обработчик события для события Click в коде позади? Если это произойдет, где это лучшее место? Загрузка страницы? Страница инициализации? Я пробовал оба места, но никакой разницы не заметил. Или это просто личное предпочтение программиста? Я уже несколько раз искал в Интернете, но не нашел удовлетворительного ответа.

Я знаю, когда фактический метод выполняется, просто не уверен насчетwiring-up part.

 gdoron18 апр. 2012 г., 01:20
@JeremyThompson. в MVC нет кода позади, слава Богу!
 walther18 апр. 2012 г., 02:05
@JeremyThompson, веб-формы ... :)
 Jeremy Thompson18 апр. 2012 г., 01:15
Вы используете какие-либо рамки, такие как MVC или это веб-формы ASP.Net?

Ответы на вопрос(2)

Решение Вопроса

Как известно, есть несколькоPage_xxx обработчики событий, напримерInit, Load, Prerender... Эти события существуют в элементах управления и страницах, а также в элементах управления пользователя (фактически они являются производной формой).Control, который содержит все эти события).

Эти события связаны сЖизненный цикл страницы ASP.NET

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

Это основные этапы жизненного цикла:

PreInit -> Init -> InitComplete -> PreLoad -> Load -> [Control events] ->
LoadComplete -> PreRender -> SaveStateComplete -> Render -> Unload

Не у всех из них есть связанные события, но, если это необходимо, вы можете переопределить соответствующиеOnXxx() функция, какOnPreInit(), (Обычно это делается только на пользовательских серверных элементах управления).

You can bind events in Page_Init or Page_Load, because the control events are triggerd after the loading of all the controls has finished,Load шаг происходит сверху вниз, сначала на странице, а затем рекурсивно во всех дочерних элементах управления.

ПослеLoad заканчивается, первыми событиями, которые запускаются, являются события изменения, такие какTextChanged или жеSelectionChanged, Затем срабатывают все другие события, какClick.

If you bound the events in PreRender or Unload, they wouldn't be triggered. If you did in Init or Load, they would.

Такit could look like it's safe to bind in Init or Load, but that's not true:

It could look like there's no special reason to bind them on Init or Load, because they'll be triggered later in the page life cycle. But, as the binding defined in the .aspx happens during Init, a programmer will expect that all events are already bound in the Load event. What would happen if this programmer raised an event of a child control in code behind? The Load event happens first in the root of the control tree, and them on all of the children, recursively. So, by the time the programmer is trying to raise the event of the child control, it won't be already bound. So this won't work as expected. This is more than enough to consider unsafe to bind events in Load event. That's why you should always bind events in Init.

Посмотрите на эту диаграмму, чтобы увидеть порядок выполнения Page & amp; детские мероприятия: Схема жизненного цикла страницы ASP.NET

 walther18 апр. 2012 г., 09:22
Да, наконец-то получил удовлетворительный ответ на мой вопрос, спасибо :)
 18 апр. 2012 г., 03:01
Я думаю, что это полностью отвечает на ваш вопрос сейчас, после редактирования.
 walther18 апр. 2012 г., 02:15
Именно по этой причине я разместил свой вопрос. Я хотел бы иметь более глубокое понимание ПОЧЕМУ и КОГДА делать определенные вещи. Я думаю, что понимаю жизненный цикл страницы, когда создавать свои элементы управления и т. Д., Но не был уверен насчет этого подключения, потому что я видел разные подходы. В то время как некоторые программисты делают это во время события Load, другие любят Init. Итак, чтобы завершить мой вопрос - правильно ли я понимаю, что это не так уж важно, и мне просто нужно быть уверенным, что не сделаю это после завершения события Load? (LoadComplete, Prerender и т. Д.)

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

<asp:Button ID="btnRefresh" runat="server" Text="Refresh" OnClick="btnRefresh_Click" />

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

 18 апр. 2012 г., 03:31
@walther - Спасибо за комментарий. Я понимаю необходимость держать вещи отдельно. Если бы мне пришлось поместить его в код, я сначала создал бы функцию для настройки моих обработчиков событий, а затем вызвал бы функцию из Page_Load.
 walther18 апр. 2012 г., 02:09
Да, я знаю об этой возможности, но ... я на самом деле не фанат этого, потому что мне нравится разделять свои слои настолько, насколько это возможно. У меня есть кодер, который работает на уровне представления (javascript, html, css ...), и я действительно не вижу причины, по которой он должен знать или даже заботиться о подключении обработчиков. Если бы я работал один, это могло бы прекрасно, но это не действительно отвечает на мой вопрос. Где бы вы подключили обработчик, если бы вам пришлось делать это в коде?

Ваш ответ на вопрос