我在其他几个项目中使用过此代码,但这次我无法让它工作。
我正在尝试跟踪按钮控件的click事件,但它不会触发。
我已尝试在page.init中的控件中重新加载(我必须将ControlsToLoad从viewstate更改为session才能再次加载控件)但这也不起作用。
这是我用于测试目的的页面:
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
感谢任何帮助。
由于
本
答案 0 :(得分:1)
要动态添加控件以参与页面生命周期,您需要在页面PreInit事件中创建它们。见ASP.NET Page Life Cycle
更新
您需要删除oTile.Dispose()
,因为它会销毁对象并删除处理程序。