Die Benutzerschnittstellensteuerung liegt bei ASP.NET in serverseitigen Ereignisbehandlungsroutinen für die Serversteuerelementereignisse.
Es gibt zwei Arten von Ereignissen:
- Ereignisse, die im Rahmen der verschiedenen Verarbeitungsschritte
einer ASPX-Datei auf dem Server ausgelöst werden (z.B. Page_Load(), TextBox1_PreRender())
- Ereignisse, die Aktionen und Zustandsänderungen (z.B. neuen Werten) auf dem Client
entsprechen (beispielsweise Button1_Click(), Textbox1_TextChanged())
Letztere Ereignisse sind nur Pseudo-Ereignisse, weil es kein
echtes Ereignissystem zwischen Client und Server gibt. Eine Datenübertragung
vom Browser an den Server findet im Rahmen einer erneuten HTTP-Anfrage (Rundgang
/ Roundtrip) zum Server statt. Ein Rundgang wird normalerweise durch einen
Klick auf eine Submit-Schaltfläche (HTTP-GET
oder HTTP-POST) oder durch den Klick auf einen Link (HTTP-GET) ausgelöst –
nicht bei jeder Änderung eines Eingabefelds.
Das ASP.NET Page Framework analysiert die HTTP-Anfrage und
erzeugt daraus (zeitverzögert) Ereignisse auf dem Server für Änderungen, die vorher
im Client erfolgt sind. Zum Webforms-Programmiermodell gehört es, dass alle
Roundtrips auf einem HTTP-POST basieren – man spricht dabei von einem Postback.
Durch clientseitigen Javascript-Code wird erreicht, dass auch ein Klick auf
einen Hyperlink oder die Wertänderung in einem Eingabefeld einen Postback
anstoßen können. Ob ein Serversteuerelement bei einem Klick oder einer Wertänderung
einen Postback auslöst, ist konfigurierbar (Attribut AutoPostBack).
Für Steuerelemente wie Texteingabefelder, die in HTML normalerweise keinen
Postback auslösen, wird dieser durch ein kleines JavaScript hervorgerufen (__doPostback()).
Die folgende Abbildung
zeigt ein Szenario, bei dem ein Postback durch einen Klick auf Button1
ausgelöst wird. Die zuvor vorgenommenen Änderungen an Textbox1 und List1
bemerkt der Server erst nach dem Roundtrip. Der Server erhält keine
Ereignismeldungen im eigentlichen Sinne, weil es in HTML / HTTP keine solchen Ereignismeldungen vom Client an den
Server gibt. Der Server bekommt lediglich den aktuellen Inhalt der
Eingabefelder, die er mit dem letzten Inhalt der Felder (die im versteckten
Feld Viewstate gespeichert werden) vergleicht. Dadurch kann das ASP.NET Page Framework erkennen, welche Aktionen auf dem Client ausgeführt
wurden. Es löst dann aber zeitverzögert die entsprechenden
Ereignisbehandlungsroutinen Textbox1_TextChanged(), List1_SelectedIndexChanged() und Button1_Click() aus. Selbstverständlich kann so
nicht bemerkt werden, wenn ein Benutzer einen Wert in einem Eingabefeld ändert
und dann vor dem Absenden den alten Wert wiederherstellt. Da aus der Sicht des
Servers nichts passiert ist, wird kein Ereignis auf dem Server ausgelöst. In
Dynamic HTML(DHTML) würden in diesem Fall zwei Änderungsereignisse auf
dem Client ausgelöst.

Abbildung 4.4 Ereignisbasierte Programmierung
Die Bindung der Ereignisbehandlungsroutinen an die
Steuerelemente erfolgt in ASP.NET durch ein Attribut im Steuerelement-Tag (z.B. OnClick="C_Absenden_Click")
oder durch Namenskonventionen.
Der VWD erstellt Ereignisbindungen zumeist nach dem ersten Verfahren. Das zweite Verfahren setzt voraus, dass Sie manuell AutoEventWireUp="true"
in der Page-Direktive setzen. Ereignisse können an übergeordnete Serversteuerelemente
weitergeleitet werden. Beispielsweise wird der Klick auf einen Link in einem
DataGrid als ein Ereignis des DataGrid aufgefasst. Immer automatisch gebunden
werden die Seiten-Ereignisse Page_Load(), Page_AbortTransaction(), Page_CommitTransaction(), Page_DataBinding(), Page_Disposed(), Page_Error(),
Page_Init(), Page_Init, Complete(), Page_Load(), Page_LoadComplete, Page_PreInit(), Page_PreLoad(), Page_PreRender(),
Page_PreRenderComplete(), Page_SaveStateComplete(), Page_Unload().
ACHTUNG
Ein »beliebtes« Problem: Eine Fehlermeldung der Form '…' does not
contain a definition for '…' sehen Sie, wenn Sie eine
Ereignisbehandlungsroutine im Code löschen, ohne das entsprechende
Ereignisbindungsattribut in der .aspx-Seite zu
entfernen. Auch im VWD müssen Sie das Ereignisbindungsattribut in der .aspx-Seite manuell entfernen, nachdem Sie die
Ereignisbehandlungsroutine gelöscht haben.
Inhalt dieses Kapitels:
<< Steuerelement-Hierarchie
(Objektbaum)
Seitenübergänge >>