2016-03-22 2 views
0

Когда загружается моя страница ASP, я считываю данные из базы данных SQL в список объектов, затем просматриваю этот список и создаю динамические метки, обновляющие панели, текстовые поля и кнопки, которые затем добавляются к основной заполнитель. Каждая обновленная панель устанавливается в условную, и уникальная кнопка добавляется в scriptmanager. Я пытался динамически создавать асинхронные триггеры, но обнаружил, что это невозможно. Ниже приведен мой код:Реагирование на динамически создаваемые кнопки обратной связи async

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) 

В нормальных обстоятельствах я понимаю, что у вас будет код для каждой кнопки, которая срабатывает. Поскольку эти кнопки создаются динамически с уникальными именами, как я могу реагировать на каждую кнопку при нажатии?

ответ

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 

Возможно, это не самый чистый или лучший способ сделать это, но он работает.

Смежные вопросы