Динамическая кнопка - onclick просто не будет работать
Я использовал этот код в нескольких других проектах, но на этот раз я просто не могу заставить его работать.
Я пытаюсь отследить событие нажатия кнопки управления, но оно просто не срабатывает.
Я попытался перезагрузить элементы управления в page.init (мне пришлось изменить ControlsToLoad с viewstate на сессию, чтобы это снова загрузило элементы управления), но это тоже не сработало.
Это страница, которую я использую для тестирования:
Inherits System.Web.UI.Page
Private ReadOnly Property ControlsToLoad() As List(Of String)
Get
If ViewState("ControlsToLoad") Is Nothing Then
ViewState("ControlsToLoad") = New List(Of String)()
End If
Return DirectCast(ViewState("ControlsToLoad"), List(Of String))
End Get
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If ControlsToLoad.Count > 0 Then
For Each sID As String In ControlsToLoad
createControl(sID)
Next
End If
If Not IsPostBack Then
loadControls()
End If
End Sub
Sub loadControls()
createControl(123)
ControlsToLoad.Add(123)
End Sub
Function createControl(ByVal sID As String)
Dim oTile As New Button
oTile.Text = Left(sID, 1)
oTile.ID = sID
oTile.Attributes("class") = "M_Tile_" & sID
AddHandler oTile.Click, AddressOf click
phMaze.Controls.Add(oTile)
oTile.Dispose()
oTile = Nothing
End Function
Protected Sub click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Response.Write("Here")
End Sub
Любая помощь приветствуется.
Спасибо
Бен
1 ответ
Решение
Чтобы ваши динамически добавленные элементы управления участвовали в жизненном цикле страницы, вам необходимо создать их в событии PreInit страницы. см. жизненный цикл страницы ASP.NET
Обновить:
Вы должны удалить oTile.Dispose()
как это уничтожает объект и удаляет обработчик.