2016-03-22 12 views
0

Wenn meine ASP-Seite geladen wird, lese ich Daten aus einer SQL-Datenbank in eine Liste von Objekten, dann durch diese Liste und dynamische Platzhalter, Updatepanels, Textfelder und Schaltflächen, die dann hinzugefügt werden ein Hauptplatzhalter. Jedes updatepanel wird auf "conditional" gesetzt und die einzigartige Schaltfläche wird dem scriptmanager hinzugefügt. Ich habe versucht, asynchrone Trigger dynamisch zu erstellen, habe aber festgestellt, dass dies nicht möglich ist. Unten ist mein Code:Reagieren auf dynamisch erstellte asynchrone Postback-Schaltflächen

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) 

In einem normalen Umständen verstehe ich Sie Code hinter für jede Taste, die einen Trigger fungiert haben. Da diese Schaltflächen dynamisch mit eindeutigen Namen erstellt werden, wie kann ich auf jede Schaltfläche reagieren, wenn sie gedrückt wird?

Antwort

0

Nachdem in die AddHandler-Funktion suchen kam ich mit diesem schmutzigen Methode up:

AddHandler btnComment.Click, AddressOf Me.Button_Handler 

Dies jeder Taste rastet, wie es erstellt wird, zeigt auf der gleichen Unterroutine zurück, und erstellt die Kontrollen innerhalb des Unterprogramms basierend auf dem Absender.

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 

Wahrscheinlich nicht der sauberste oder beste Weg, es zu tun, aber es funktioniert.