2016-03-22 17 views
0

ASP sayfam yüklendiğinde, bir SQL veritabanından nesnelerin listesine veri okuyorum, daha sonra bu listeye geçerek dinamik yer tutucuları, güncelleme panellerini, metin kutularını ve daha sonra eklenen düğmeler oluşturun. ana yer tutucu. Her bir güncelleme panosu koşullu olarak ayarlanır ve komut dosyası yöneticisine benzersiz düğme eklenir. Async tetikleyicileri dinamik olarak oluşturmaya çalıştım ancak bunun mümkün olmadığını tespit ettim.Dinamik olarak oluşturulmuş async geri bildirim düğmelerine yanıt verme

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) 

Sana bir tetikleyici davranan her düğme için arkasında kod olurdu anlıyorum Normal bir durum olarak: Aşağıda benim kodudur. Bu düğmeler benzersiz isimlerle dinamik olarak oluşturulduğundan, her bir düğmeye basıldığında nasıl tepki verebilirim?

cevap

0

AddHandler fonksiyonu içine baktıktan sonra bu kirli yöntem ile geldi:

Bu oluşturulur oluşturulmaz her düğmeye sürgüler
AddHandler btnComment.Click, AddressOf Me.Button_Handler 

, aynı alt rutin geri işaret ve alt yordam içinde denetimleri oluşturur gönderene dayalı. Muhtemelen

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 

temiz ya da en iyi yolu

bunu yapmak için ama işe yarıyor.