【问题标题】:No server-side click event for dynamically-generated LinkButton动态生成的 LinkBut​​ton 没有服务器端点击事件
【发布时间】:2015-03-26 01:18:44
【问题描述】:

我正在尝试在我系统的一个主页(网络表单)上添加一个新部分,以允许用户查看他们上传到他们创建的文件夹中的文档。我事先不知道他们设置了多少个文件夹,也不知道这些文件夹的名称。我试图通过一个 GridView 来实现这一点,它上面有一系列动态生成的 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 函数只是“被删除”,如下所示:

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

        Dim i As Integer

        i = 1

    End Sub

【问题讨论】:

  • AddHandler lnkFolder.Click, AddressOf Me.lnkFolder_Click 将通过回发解决问题
  • 感谢您的快速回复!我添加了行 lnkFolder.Attributes.Add("lnkFolder.Click", "AddressOf Me.lnkFolder_Click") 但它仍然没有触发服务器端功能。
  • 能否提供您的 lnkFolder_Click 函数的签名?
  • 浏览器控制台有错误吗?
  • 没有错误,InvernoMuto。向 OP 添加了函数签名。对不起,我最初没有包括它。

标签: vb.net dynamic-controls asplinkbutton


【解决方案1】:

您可以使用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

【讨论】:

  • 使用此代码我收到以下错误:Microsoft JScript 运行时错误:属性“lnkFolder_Click”的值为 null 或未定义,不是函数对象
  • Ahhh....删除了以下行:lnkFolder.Attributes.Add("OnClick", "lnkFolder_Click()") 并且效果很好!谢谢 InvernoMuto!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多