动态按钮 - onclick刚刚工作

时间:2014-04-13 10:34:44

标签: asp.net vb.net dynamic addhandler

我在其他几个项目中使用过此代码,但这次我无法让它工作。

我正在尝试跟踪按钮控件的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

感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

要动态添加控件以参与页面生命周期,您需要在页面PreInit事件中创建它们。见ASP.NET Page Life Cycle

更新

您需要删除oTile.Dispose(),因为它会销毁对象并删除处理程序。