FindControl
только ищет прямые дочерние элементы контейнера.Поскольку вы начинаете с уровня страницы, вам нужно будет пройти через дочерний элемент управления UpdatePanel
, чтобы перейти к вашему элементу управления btnAdd
.
Посмотрите, например, здесь как это сделать.
Редактировать: Я не уверен, что понимаю, почему вы так «ищете» свою кнопку, поскольку на экране только одна статическая кнопка- вам не нужно будет использовать FindControl
в этом случае.
<asp:Button ID="btnAdd" runat="server" Text="Add" onclick="btnAdd_Click" />
(или в коде, btnAdd.OnClick += new EventHandler(btnAdd_Click);
)
Даже если у вас есть несколько кнопок в вашей форме, добавляемых динамическиВы можете связать ВСЕ из них с одним и тем же обработчиком Click Button, и тогда sender
будет содержать Button Control, который был нажат.Обычно вы используете FindControl для очистки данных из динамически добавленных элементов управления вводом (текстовое поле и т. Д.), А не для того, чтобы увидеть, какой элемент управления вызвал обратную передачу (поскольку «отправитель» в соответствующем обработчике события будет проще)
Редактировать 2: Вы можете добавлять кнопки динамически, как и другие ваши элементы управления
Button myButton = new Button();
myButton.Text = "Click Me";
myButton.Click += new EventHandler(btnAdd_Click);
myPlaceHolder.Controls.Add(myButton);
Если вы хотите, чтобы все добавленные вами элементы управления «оставались» между постбэками, тогдавключите viewstate на странице и в элементах управления, а затем убедитесь, что вы добавляете элементы управления только один раз без обратной передачи, в OnInit:
base.OnInit(e);
if (!IsPostBack)
{ // ... Add controls here
Вы можете сохранить состояние 'mycount' в скрытом поле (в той же панели обновления, и с включенным viewstate) - вам нужно будет каждый раз анализировать его в int.Или вы можете использовать SessionState для его отслеживания.