Не могу запустить мое мероприятие - PullRequest
0 голосов
/ 04 сентября 2008

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

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

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

Ответы [ 4 ]

4 голосов
/ 04 сентября 2008

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

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

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

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

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

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

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

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

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

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

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

1 голос
/ 04 сентября 2008

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

  1. Страница создана с кнопкой и обработчик событий прикреплен
  2. Кнопка нажата, вызывая обратную передачу
  3. При обратной передаче событие page_load пропускает присоединение обработчика событий из-за вашего оператора! IsPostback
  4. На данный момент для кнопки нет обработчика событий, поэтому нажатие на нее не вызовет ваше событие
0 голосов
/ 04 сентября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...