动态生成的 Linkbutton 不会触发 Onclick 事件 VB.Net

Dynamically generated Linkbutton does not fire Onclick event VB.Net

我按照一些说明在运行时使用事件触发器创建了一个新的 LinkBut​​ton,并为生成的 LinkBut​​ton 添加了一个事件处理程序。我不知道为什么新的 LinkBut​​ton 不会触发添加到它的事件。有谁请guide/correct我

这就是我现在拥有的。

ASPX:

<form id="myForm" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">

 <ContentTemplate>

 <table class="mel-table" style="text-align: center" runat="server" id="mytab1">

    <tbody>
        <tr>
            <td>Case Number :</td>

            <td>
            <asp:TextBox ID="caseNumber" runat="server"></asp:TextBox>
            </td>

        </tr>

    </tbody>
  </table>

   <asp:Button OnClick="btnOK1_Click" ID="btnOK1" runat="server" Text="Save" />

  </ContentTemplate>

  </asp:UpdatePanel>
 </form>

ASPX.VB:

Protected Overloads Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Session("tablecontent") IsNot Nothing Then
        mytab1 = CType(Session("tablecontent"), HtmlTable)
    End If
End Sub

Public Function checking() As Boolean

        Dim caseNo As Double
            Try
                caseNo = Convert.ToDouble((caseNumber.Text).Trim())
            Catch ex As Exception
            caseNo = 0
            End Try

        Dim r As New HtmlTableRow
        Dim c0 As New HtmlTableCell
        r.Cells.Add(c0)

        Dim but As New LinkButton
        but.ID = caseNo 
        but.Text = caseNo.ToString() 
        AddHandler but.Click, AddressOf LinkButton1_Click
        c0.Controls.Add(but)

        mytab1.Rows.Add(r)
        Session("tablecontent") = mytab1
        Return True
End Function

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

    'My Code here

End Sub

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

    If (checking()) Then

        ScriptManager.RegisterStartupScript(Page, Page.GetType, "Alert", "<script type='text/javascript'>alert('Success');</script>", False)

    End If

End Sub

无论何时创建动态控件,都必须在回发时重新加载它。我正在使用方法调用 ReloadRows() 来重新加载我保存在 ViewState 中的添加案例:

        <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >
            <ContentTemplate>
                <asp:Table class="mel-table" style="text-align: center" runat="server" id="mytab1">
                    <asp:TableRow>
                        <asp:TableCell>Case Number :</asp:TableCell>
                        <asp:TableCell>
                            <asp:TextBox ID="caseNumber" runat="server"></asp:TextBox>
                        </asp:TableCell>
                    </asp:TableRow>
                </asp:Table>
                <asp:Button OnClick="btnOK1_Click" ID="btnOK1" runat="server" Text="Save" />
            </ContentTemplate>
        </asp:UpdatePanel>

--------------------------------------------------------------------------------------------------------

Public Partial Class _Default
    Inherits System.Web.UI.Page

    Private listCaseNo As List(Of Double) = Nothing

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

    End Sub


    Protected Sub Page_Load(sender As Object, e As EventArgs)
        If ViewState("ListCases") IsNot Nothing Then
            listCaseNo = DirectCast(ViewState("ListCases"), List(Of Double))
        Else
            listCaseNo = New List(Of Double)()
        End If

        ReloadRows()
    End Sub

    Public Function checking() As Boolean

        Dim caseNo As Double = 0
        Try
            caseNo = Convert.ToDouble((caseNumber.Text).Trim())
        Catch ex As Exception
            caseNo = 0
        End Try

        Dim r As New TableRow()
        Dim c0 As New TableCell()
        r.Cells.Add(c0)

        Dim but As New LinkButton()
        but.ID = Convert.ToString(caseNo)
        but.Text = caseNo.ToString()
        AddHandler but.Click, AddressOf LinkButton1_Click
        c0.Controls.Add(but)

        mytab1.Rows.Add(r)

        listCaseNo.Add(caseNo)

        ViewState("ListCases") = listCaseNo

        Return True
    End Function


    Private Sub ReloadRows()
        For Each objCase As var In listCaseNo
            Dim r As New TableRow()
            Dim c0 As New TableCell()
            r.Cells.Add(c0)

            Dim but As New LinkButton()
            but.ID = Convert.ToString(objCase)
            but.Text = objCase.ToString()
            AddHandler but.Click, AddressOf LinkButton1_Click
            c0.Controls.Add(but)

            mytab1.Rows.Add(r)
        Next
    End Sub

    Protected Sub LinkButton1_Click(sender As Object, e As EventArgs)
        'My Code here

    End Sub


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


        If (checking()) Then
        End If

    End Sub

End Class

当您点击 "Save" 按钮时,将数据保存在本地存储或数据库中,然后尝试再次加载页面以使用存储中的内容填充页面。在这种情况下,您可以在页面上拥有内容,因此您也可以利用事件。