动态生成的 LinkButton 没有服务器端点击事件
No server-side click event for dynamically-generated LinkButton
我正在尝试在我系统的一个主要页面(Web 表单)上添加一个新部分,允许用户查看他们上传到他们创建的文件夹中的文档。我事先不知道他们设置了多少文件夹或文件夹的名称。我试图通过一个 GridView 实现这一点,上面有一系列动态生成的 LinkButton,每个文件夹都有一个 LinkButton。当用户单击 LinkButton 时,我将重新绑定网格,以便它显示该文件夹中的文档。我希望使用选项卡控件来表示文件夹,但显然这在 .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
我正在尝试在我系统的一个主要页面(Web 表单)上添加一个新部分,允许用户查看他们上传到他们创建的文件夹中的文档。我事先不知道他们设置了多少文件夹或文件夹的名称。我试图通过一个 GridView 实现这一点,上面有一系列动态生成的 LinkButton,每个文件夹都有一个 LinkButton。当用户单击 LinkButton 时,我将重新绑定网格,以便它显示该文件夹中的文档。我希望使用选项卡控件来表示文件夹,但显然这在 .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