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