【问题标题】:Dynamic button - onclick just won't work动态按钮 - onclick 不起作用
【发布时间】:2014-04-13 10:34:43
【问题描述】:

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

我正在尝试跟踪按钮控件的单击事件,但它没有触发。

我尝试在 page.init 中重新加载控件(我必须将 ControlsToLoad 从视图状态更改为会话,才能再次加载控件),但这也不起作用。

这是我用于测试目的的页面:

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

感谢任何帮助。

谢谢

【问题讨论】:

  • 如果你需要这方面的帮助,你需要添加 vb.net 标签 - 但是我看不到任何明显的东西 - 看不到 phMaze 的定义位置,所以可能从那里开始?添加vb标签你会得到更多帮助!
  • 感谢格雷厄姆的回复。 phMaze 是页面上的固定占位符;不会引起任何问题。

标签: asp.net vb.net dynamic addhandler


【解决方案1】:

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

更新:

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

【讨论】:

  • ControlsToLoad.C​​ount 在 Init 或 PreInit 中始终为零
  • 那是对视图状态的不当使用,您应该使用另一种方法
  • 正如我在原帖中提到的,从视图状态更改为会话变量允许我将代码放在 preinit 或 init 中,但同样的问题仍然存在于 onclick 事件中。
  • 移除 oTile.Dispose()
  • 删除 oTile.Dispose() 工作谢谢!随意添加作为单独的答案,以便我可以标记它。
猜你喜欢
  • 2016-01-22
  • 2013-07-10
  • 2018-05-10
  • 1970-01-01
  • 2012-03-26
  • 2015-02-24
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多