Динамическое нажатие кнопки VB ASP не затрагивает событие обработчика

Я динамически создаю кнопки для нумерации страниц, которые должны вызывать обработчик событий при нажатии. Обратная передача происходит, однако она никогда не попадает в сабвуфер событий. Это мой код создания кнопки (i = 0):

 Do While (i < pages)
    Dim btn As New Button With {
        .Text = (i).ToString,
        .CommandArgument = (i).ToString,
        .ID = "btnGrdPage_" + (i).ToString
    }

    AddHandler btn.Click, AddressOf Me.btnGrdParticipantPage_Click
    dvPageNumbers.Controls.Add(btn)

    i += 1

Loop

Событие, на которое я пытаюсь попасть по клику, выглядит следующим образом:

 Protected Sub btnGrdParticipantPage_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim x = 1
    ...
 End Sub

1 ответ

Решение

Где этот код живет?

Помните, что каждый постбэк создает (а затем уничтожает) новый экземпляр класса страницы. Вы не можете хранить один и тот же экземпляр от поста к посту. Это означает, что код для создания элементов управления должен повторяться при каждой обратной передаче. В противном случае эти элементы управления не будут существовать, и они просто исчезнут после следующего события сервера. Более того, это должно произойти очень рано в жизненном цикле страницы... до восстановления ViewState, потому что, если элементы управления еще не существуют на данный момент, они не могут получить обновленное ViewState, а ViewState - то, как жизненный цикл страницы знает, что они нужно поднять событие клика. Page_Load()слишком поздно для этого Попробуйте использовать Page_Init() или же Page_PreInit() вместо.

Другие вопросы по тегам