Asp.net

動態生成的連結按鈕不會觸發 Onclick 事件 VB.Net

  • May 4, 2015

我已按照一些說明在執行時使用事件觸發器創建新的 LinkBut​​ton,並為生成的 LinkBut​​ton 添加事件處理程序。我不知道為什麼新的 LinkBut​​ton 不會觸發添加到它的事件。任何人請指導/糾正我。

這就是我現在所擁有的。

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

引用自:https://stackoverflow.com/questions/29957981