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 aus­geführt wurden. Es löst dann aber zeitverzögert die entsprechenden Ereignisbehandlungsroutinen Text­box1_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_Commit­Trans­action(), Page_DataBinding(), Page_Disposed(), Page_Error(), Page_Init(), Page_Init, Complete(), Page_Load(), Page_­Load­Complete, Page_PreInit(), Page_PreLoad(), Page_PreRender(), Page_Pre­Render­Com­plete(), 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 >>