2008-09-03 3 views
0

При загрузке страницы в первый раз (! IsPostback) я создаю кнопку в коде и добавляю ее на свою страницу, а затем добавляю обработчик события в событие click.Не удается запустить мое событие

Однако при нажатии кнопки после перезагрузки страницы мой обработчик событий не срабатывает.

Может ли кто-нибудь объяснить, почему?

ответ

4

@ Брэд: Ваш ответ не является полным; он скорее всего сделает это слишком поздно в жизненном цикле страницы, во время события Page_Load.

Хорошо, вот что вам не хватает.

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

Когда пользователь нажимает кнопку, это событие отправляется обратно на сервер вместе с другой информацией, например, в скрытое поле viewstate.

На стороне сервера ASP.NET определяет, какая страница обрабатывает запрос, и перестраивает страницу с нуля. Новые экземпляры серверных элементов управления создаются и связаны друг с другом в соответствии со страницей .aspx. После его повторной сборки оцениваются данные обратной передачи. Просмотр состояния используется для заполнения элементов управления, а события запускаются.

Все это происходит в определенном порядке, называемом Page Lifecycle. Чтобы сделать более сложные вещи в ASP.NET, такие как создание динамических элементов управления и добавление их на веб-страницу во время выполнения, вы ДОЛЖНЫ понимать жизненный цикл страницы.

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

Вы хотите, чтобы ваши элементы управления были загружены до того, как информация ViewState разобралась и была добавлена ​​в элементы управления, а до того, как загорелись контрольные события, вам необходимо обработать событие PreInit и добавить свою кнопку в эту точку. Опять же, вы должны сделать это КАЖДОЕ ВРЕМЯ, страница загружена.

Последнее примечание; обработка событий страницы немного нечетна в ASP.NET, потому что события автообновлены. Обратите внимание, что обработчик события загрузки называется Page_Load ...

2

Вам нужно добавить кнопку всегда не только для обратных передач.

0

Это связано с тем, что происходящее событие должно быть переведено в HTML. Этот postback, который происходит, если привязан к странице между OnInit и OnLoad. Поэтому, если вы хотите, чтобы кнопка привязывала события, отвечайте, убедитесь, что вы выполняете работу в OnInit.

См. Пояснение жизненного цикла страницы.

http://msdn.microsoft.com/en-us/library/ms178472.aspx

1

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

  1. Страница создана с кнопкой и обработчик события присоединен
  2. кнопка нажата, в результате чего постбэк
  3. На постбэка, событие Page_Load пропускает прикрепление ! обработчик событий Becaue вашего заявления IsPostBack
  4. на данный момент нет ни одного обработчика события для кнопки, поэтому нажатие не будет срабатывать ваше мероприятие
Смежные вопросы