@ Брэд: Ваш ответ не завершен; он, скорее всего, делает это слишком поздно в жизненном цикле страницы, во время события Page_Load.
Хорошо, вот что вам не хватает.
ASP.NET не имеет состояния. Это означает, что после того, как ваша страница отрисована и отправлена в браузер, объект страницы и все на нем уничтожается. На сервере между этой страницей и тем, что находится в браузере пользователя, не осталось никакой ссылки.
Когда пользователь нажимает кнопку, это событие отправляется обратно на сервер вместе с другой информацией, такой как скрытое поле представления состояния.
На стороне сервера ASP.NET определяет, какая страница обрабатывает запрос, и перестраивает страницу с нуля. Новые экземпляры серверных элементов управления создаются и связаны друг с другом в соответствии со страницей .aspx. После повторной сборки оцениваются данные обратной передачи. Состояние представления используется для заполнения элементов управления и запускаются события.
Все это происходит в определенном порядке, называемом Page Lifecycle . Чтобы делать более сложные вещи в ASP.NET, например создавать динамические элементы управления и добавлять их на веб-страницу во время выполнения, вы ДОЛЖНЫ понимать жизненный цикл страницы.
При возникновении проблемы вы должны создавать эту кнопку каждый раз при загрузке страницы. Кроме того, вы должны создать эту кнопку ДО события на странице. Управляющие события срабатывают между Page_Load и Page_LoadComplete.
Вы хотите, чтобы ваши элементы управления были загружены до того, как информация ViewState будет проанализирована и добавлена в элементы управления, а также до того, как сработают события элемента управления, поэтому вам нужно обработать событие PreInit и добавить свою кнопку в этот момент. Опять же, вы должны делать это КАЖДЫЙ РАЗ, когда страница загружена.
Последнее замечание; Обработка событий страницы немного странная в ASP.NET, потому что события автоматически связаны. Обратите внимание, что обработчик события Load называется Page_Load ...