动态图像按钮事件处理程序未触发

我有一个动态表正在page_load上构建。

我把表放在更新面板中,这样我就可以动态地添加行而不需要完整的页面回发。每行有4个单元格,其中3个包含文本框,第4个单元格是需要删除该行的图像按钮。

但是,删除行的图像按钮会回发,但不会触发事件处理程序子。

我将表格设置为会话变量以在回发上重新加载。

<%--Update Panel with Image Button to add row--%>

 
    
    <div style="height:100px; overflow:scroll; overflow-x:hidden;">
        
    </div>   
 

在page.init中,如果pnl页面处于回发状态,则重新创建范围

    If pnlHA.Page.IsPostBack Then
        spanTBL_HA.Controls.Clear()
        spanTBL_HA.Controls.Add(CType(Session("tblHA"), Table))
    End If

图像按钮被添加到表格单元格

img = New ImageButton

Session("tblHA_Counter") = CInt(Session("tblHA_Counter")) + 1

img.AlternateText = "Delete Row"
img.Attributes.Add("style", "height: 10px; width: 10px; cursor: hand;")
img.ImageUrl = "../images/minus_red.png"
img.ID = "img_" & CInt(Session("tblHA_Counter")).ToString
AddHandler img.Click, AddressOf imgRemove_Click
img.Attributes.Add("runat", "server")

tc.Attributes.Add("style", "width:35px")
tc.Controls.Add(img)

点击事件

Protected Sub imgRemove_Click(ByVal sender As Object, ByVal e As ImageClickEventArgs)
    Dim img As ImageButton = CType(sender, ImageButton)
    Dim delRow As TableRow = Nothing
    Dim rowIndex As Integer = 0

    For Each row As TableRow In CType(Session("tblHA"), Table).Rows
        If CType(row.Cells(3).Controls(0), ImageButton).UniqueID = img.UniqueID Then
            delRow = row
        End If
    Next

    If delRow IsNot Nothing Then
        CType(Session("tblHA"), Table).Rows.Remove(delRow)
    End If

    spanTBL_HA.Controls.Clear()
    spanTBL_HA.Controls.Add(CType(Session("tblHA"), Table))

End Sub
0
额外 编辑
意见: 1

1 答案

动态控件需要在每次创建页面时重新创建,以允许ASP.NET将视图状态,回发数据和事件连接恢复到动态创建的控件。所以请记住在回发中重新创建它们。

请检查您是否在每个帖子后面创建它们。

0
额外
初始表在page_load上创建并设置为会话变量,然后添加到范围中。 span_tblHA.Controls.Add(CType(Session(“tblHA”),Table)))在page_init回发期间,我将span控制重置为会话。这不符合“重新创建”的要求吗?
额外 作者 Dan,