动态生成的 LinkBut​​ton 没有服务器端点击事件

No server-side click event for dynamically-generated LinkButton

我正在尝试在我系统的一个主要页面(Web 表单)上添加一个新部分,允许用户查看他们上传到他们创建的文件夹中的文档。我事先不知道他们设置了多少文件夹或文件夹的名称。我试图通过一个 GridView 实现这一点,上面有一系列动态生成的 LinkBut​​ton,每个文件夹都有一个 LinkBut​​ton。当用户单击 LinkBut​​ton 时,我将重新绑定网格,以便它显示该文件夹中的文档。我希望使用选项卡控件来表示文件夹,但显然这在 .NET 3.5 中不可用。我在 VB.NET.

编码

我 运行 关注的问题是动态添加 OnClick 事件处理程序。我使用的代码基本上是实现一个 OnClientClick 事件。如果我添加一个名为 lnkFolder_Click 的 Javascript 函数并发出警报,它会触发该函数,当我需要它来触发服务器端函数以重新绑定网格时。我看过很多关于这个问题的页面,并提出了各种建议,包括将代码放在页面的 PreInit 事件中。 None 这些建议对我有用,所以我希望 StackExchange 社区可以像过去一样帮助我朝着正确的方向前进!以下代码是我正在尝试的,位于页面加载事件中。

提前致谢!

        Dim dtFolders As DataTable
        Dim i As Integer

        dtFolders = DAL.GetClientFolders(Session("ClientKey"))
        If dtFolders.Rows.Count > 0 Then
            For i = 0 to dtFolders.Rows.Count - 1
                Dim lnkFolder As LinkButton = New LinkButton
                lnkFolder.ID = "lnkFolder" & i.ToString
                lnkFolder.Text = dtFolders.Rows(i)("FolderName")
                lnkFolder.CommandArgument = i
                lnkFolder.Attributes.Add("OnClick", "lnkFolder_Click()")
                'lnkFolder.OnClientClick += New EventHandler(lnkFolder_Click)
                phFolders.Controls.Add(lnkFolder)                  
            Next
        End If

lnkFolder_Click函数就是"stubbed-out"如下:

Protected Sub lnkFolder_Click(sender As Object, e As EventArgs) Handles lnkFolder.Click

        Dim i As Integer

        i = 1

    End Sub

您可以使用 AddHandler Statement

添加服务器端回调

Associates an event with an event handler at run time.

AddHandler event, AddressOf eventhandler

The AddHandler statement connects procedures to events at run time.

Dim dtFolders As DataTable
        Dim i As Integer

        dtFolders = DAL.GetClientFolders(Session("ClientKey"))
        If dtFolders.Rows.Count > 0 Then
            For i = 0 to dtFolders.Rows.Count - 1
                Dim lnkFolder As LinkButton = New LinkButton
                lnkFolder.ID = "lnkFolder" & i.ToString
                lnkFolder.Text = dtFolders.Rows(i)("FolderName")
                lnkFolder.CommandArgument = i

                AddHandler lnkFolder.Click, AddressOf Me.lnkFolder_Click 

                phFolders.Controls.Add(lnkFolder)                  
            Next
        End If

Protected Sub lnkFolder_Click(sender As Object, e As EventArgs) 

  Dim i As Integer

  i = 1

End Sub