Montag, 13. April 2015

Event von Web-Usercontrol als Repeater-Element auslösen

Wenn man ein Usercontrol als Listen-Element in einem Repeater einsetzt, will man wahrscheinlich auf Klicks innerhalb des Controls im Repeater reagieren. Eigentlich kein Problem, man muss nur im selbstgebauten Control ein Public Event definieren und beim passenden Klick das Event auslösen. Außerdem muss das Event natürlich im Repeater registriert werden, um darauf zu reagieren.

In VB .NET sähe das so aus:

Z.B. im Usercontrol:

Public Event Changed(sender As Objecte As EventArgs)

Dann in der Klick-Routine:

RaiseEvent Changed(MeNew EventArgs)

Und im Repeater wird dieses Event so registriert:

AddHandler <Usercontrol>.ChangedAddressOf <Subroutine>

Soweit so gut.

Die Frage ist allerdings, wann registriere ich den Eventhandler? Ich habe das zunächst innerhalb des ItemDataBound-Ereignisses im Repeater gemacht. Was mir deshalb logisch erschien, weil zu dem Zeitpunkt das Usercontrol vorhanden sein muss. Doch, wie ich nach etlichen Versuchen feststellte, es wird dann nie ausgelöst, bzw. es wird im Usercontrol ausgelöst aber kommt nie im Repeater an. Echt frustrierend.

Die Lösung ist, wie immer einfach, wenn man's weiß: das Event muss unbedingt im ItemCreated-Ereignisses des Repeaters registriert werden! Denn dies Event wird bei jedem Aufruf der Seite, auch bei Postbacks aufgerufen!

Keine Kommentare: