响应动态创建的异步回发按钮

时间:2016-03-22 10:55:35

标签: asynchronous updatepanel scriptmanager

当我的ASP页面被加载时,我正在从SQL数据库中读取数据到对象列表,然后循环遍历此列表并创建动态占位符,更新面板,文本框和按钮,然后将其添加到主占位符。每个updatepanel都设置为conditional,并将唯一按钮添加到scriptmanager。我试图动态创建异步触发器,但发现这是不可能的。以下是我的代码:

Dim plcComments As New PlaceHolder()
plcComments.ID = "plcComments" + Link.ID.ToString()

Dim updComments As New UpdatePanel()
updComments.ID = "updComments" + Link.ID.ToString()
updComments.UpdateMode = UpdatePanelUpdateMode.Conditional

Dim txtComment As New TextBox()
txtComment.ID = "txtComment" + Link.ID.ToString()
txtComment.Text = "txtComment " + Link.ID.ToString() 'Example text
updComments.ContentTemplateContainer.Controls.Add(txtComment)

Dim btnComment As New Button()
btnComment.ID = "btnComment" + Link.ID.ToString()
btnComment.Text = "btnComment" + Link.ID.ToString()
updComments.ContentTemplateContainer.Controls.Add(btnComment)
ScriptManager1.RegisterAsyncPostBackControl(btnComment)

plcComments.Controls.Add(updComments)

在正常情况下,我知道你会为每个触发器的按钮设置代码。由于这些按钮是使用唯一名称动态创建的,因此在按下按钮时如何对每个按钮做出反应?

1 个答案:

答案 0 :(得分:0)

在查看AddHandler函数后,我想出了这个脏方法:

AddHandler btnComment.Click, AddressOf Me.Button_Handler

这会在创建时锁定每个按钮,指向同一个子例程,并根据发送者在子例程中创建控件。

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

    Dim Comment_ID As String = DirectCast(sender, Button).ID.ToString.Remove(0, 3)

    Dim txtComment As TextBox = Me.FindControl("txt" & Comment_ID)
    Dim plcComment As PlaceHolder = Me.FindControl("plc" & Comment_ID)
    Dim updComment As UpdatePanel = Me.FindControl("upd" & Comment_ID)

End Sub

可能不是最干净或最好的方法,但它有效。