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

时间:2015-03-25 16:37:08

标签: vb.net dynamic-controls asplinkbutton

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

我遇到的问题是动态添加OnClick事件处理程序。我正在使用的代码基本上是实现OnClientClick事件。如果我添加一个名为lnkFolder_Click的Javascript函数,它会触发该函数,当我需要它来触发服务器端函数重新绑定网格时。我已经看到很多关于这个问题的页面提出了各种建议,包括将代码放在页面的PreInit事件中。这些建议都不适合我,所以我希望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

1 个答案:

答案 0 :(得分:0)

您可以使用AddHandler Statement

添加服务器端回调
  

在运行时将事件与事件处理程序关联。

     

AddHandler event, AddressOf eventhandler

     

AddHandler语句将过程连接到   运行时的事件。

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