Asp.net
動態生成的連結按鈕不會觸發 Onclick 事件 VB.Net
我已按照一些說明在執行時使用事件觸發器創建新的 LinkButton,並為生成的 LinkButton 添加事件處理程序。我不知道為什麼新的 LinkButton 不會觸發添加到它的事件。任何人請指導/糾正我。
這就是我現在所擁有的。
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