2 Stimmen

Asp.net Ereignishandler beim Klicken auf Schaltfläche dynamisch

Hallo alle zusammen, ich habe gerade angefangen, in asp.net zu programmieren und kämpfe damit, einen Event-Handler dynamisch hinzuzufügen. Hier ist das Szenario: Wenn die aspx-Seite geladen wird, wird ein Link-Button mit einem Event-Handler hinzugefügt

Seite lädt Link-Button und Event-Handler mit Link-Button


Dim Produkte As New LinkButton

Produkte.Text = "Produkte"

testPanel.Controls.Add(Produkte)

AddHandler Produkte.Click, AddressOf getProducts


Die Funktion getProducts wird in der Datenbank alle Produkte durchlaufen

Dim testDb As New Produkt
Dim arr As ArrayList = testDb.DbLoop()
Dim ObjList As ProduktBo
Dim ID As Integer
Dim link As LinkButton

For Each ObjList In arr

    ID = ObjList.C_Id
    link = New LinkButton
    testPanel.Controls.Add(New LiteralControl(""))
    link.ID = ID
    link.Text = ObjList.Name
    link.CommandArgument = CustInt
    Me.testPanel.Controls.Add(link)
    AddHandler link.Click, AddressOf getProductsDetails
Next ObjList

HIER IST MEIN Problem: Nachdem es durchgelaufen ist, wird eine Liste der Produkte in der Datenbank angezeigt. Was ich tun möchte, ist, einen Link zu jedem Produktnamen hinzuzufügen. Wenn ich auf ein Produkt klicke, sollte ein weiterer Event-Handler aufgerufen werden. Ich habe es mit diesem versucht, aber es funktioniert nicht.

AddHandler link.Click, AddressOf getProductsDetails

Danke

3voto

Richard Friend Punkte 15340

Vergessen Sie nicht, dass Sie alle dynamischen Steuerelemente beim Postback neu erstellen müssen

Ihre Seite ist nur eine Klasse und wird bei jedem Request instanziiert, wenn sie diese Steuerelemente sowie die zugehörigen Handler beim Postback-Request nicht neu erstellt, wird nichts passieren..

Sie müssen diese Steuerelemente vor dem Page_Load neu erstellen, dies kann im Page_Init erfolgen oder indem Sie die Methode CreateChildControls überschreiben.

2voto

Robert Beaubien Punkte 3096

Der Grund, warum es nicht funktioniert, ist, dass Sie einen Postback durchführen. Sie müssen Ihren Handler bei jedem Postback erneut hinzufügen. Ich würde es im Seitenevents _Init machen.

1voto

Hasan Fahim Punkte 3865

Vertauschen Sie die folgende Zeile:

Me.testPanel.Controls.Add(link)
AddHandler link.Click, AddressOf getProductsDetails

Sie sollten sein:

AddHandler link.Click, AddressOf getProductsDetails
Me.testPanel.Controls.Add(link)

0voto

Liyibin Punkte 1

Versuche dies:

Geschützte Unterseite_init(ByVal sender Als Object, ByVal e Als System.EventArgs) Handles Me.Init 'addhadler muss hier sein!
    somecode...
End Sub

0voto

Liyibin Punkte 1
   Protected Sub page_init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init 
    addButton()'
End Sub

Public sub addButton(ByVal nvrid As Integer) As Object
'.....
        AddHandler btn.Command, AddressOf testCmd
End sub
    Private Sub testCmd(source As Object, e As CommandEventArgs)
        Debug.Print(e.ToString)

End Sub

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X