0

このコードを他のいくつかのプロジェクトで使用しましたが、今回はうまく動作しません。

ボタン コントロールのクリック イベントを追跡しようとしていますが、起動していません。

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

どんな助けでも大歓迎です。

ありがとう

ベン

4

1 に答える 1

1

動的に追加されたコントロールがページのライフ サイクルに参加するには、ページの PreInit イベントでそれらを作成する必要があります。ASP.NET ページのライフ サイクルを参照してください。

アップデート:

oTile.Dispose()オブジェクトを破棄してハンドラーを削除するため、削除する必要があります。

于 2014-04-14T08:12:52.053 に答える