DevTrain

Autor: Hannes Preishuber

ASP.NET Eventbehandlung

Das behandeln von Events ist in ASP eine durchaus komplexe Sache. Meist wird die Request Methode abgefragt (POST) und dann per request.Form auf den Inhalt von Feldern zugegriffen.
Sehen wir uns das ganze in ASP.NET an. Zunächst betrachten wir ein einfaches Eingabeformular.

Der Aufbau erfolgt wie ein normales HTML Formular. Er erste erkennbare Unterschied ist der Zusatz RUNAT= "SERVER" als Attribut in jedem Steuerelement.< /P >
<INPUT type="radio" name="rad" value="M" checked id="rad1" runat="server">

Dies erleichtert auch die Migration von bestehenden ASP Seiten. Jedes HTML Control auch eine zb vorhandener DIV oder Submit Button werden so als Server Element bekannt gemacht. Nicht zu vergessen das FORM an sich.

Das behandeln der Events kann dann komfortabel in einem Codeblock durchgeführt werden. Dabei gilt es ein paar Regulaarien zu beachten. Der HTML Submit Button weist plötzlich ein zusätzliches Attribut OnServerClick auf. Dies gibt den Funktionsnamen im Server  Block an. Nach wie vor kann über OnClick eine ClientFuntkion angeben werden. Diese wird logischerweise vor dem Server Click ausgeführt. Der Funktionsrumpf muss dann noch 2 Parmeter enthalten die eine Referenz auf den Sender und auf die Argumente liefern. Wichtig ist das z.B. wenn ein Handler mehrere Buttons behandeln soll.

<INPUT type="submit" value="Submit" id="Submit1" OnServerClick="SubmitClick" name="Submit1" runat="server">

...
Private Sub SubmitClick(ByVal sender As System.Object, ByVal e As System.EventArgs)

Durch diesen simplen Zusatz runat="Server" wird das komplette Objektmodell am Server aktiviert. So ist ein einfacher Zugriff auf alle Eigenschaften möglich. Solche ASPX Seiten müssen übrigens nicht kompiliert werden, sondern werden von der ASPX Engine (aspnet_wp) automatisch beim ersten Aufruf durch den Kompiler gejagt.


Der komplette Code zum schnellen ausprobieren. Hier wird auch sehr gut gezeigt wie man mit einem DIV Tag elegant Ausgaben auf dem Bildschirm platzieren kann. Um Zuweisungen für das Layout der Seite zu machen, steht die Funktion Page_load bereit, die vor dem Laden der ausgeführt wird. Um abzufragen ob es sich um ein POST handelt können Sie PostBack benutzen. (if postback then..)

<%@ Page Language="vb" %>
<HTML>
 <HEAD>
<script language="vb" runat="server">
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
   DIV1.innertext="start"

End Sub
Private Sub SubmitClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
 if rad1.checked then
  DIV1.innertext="weiblich"
 else
  DIV1.innertext="männlich"
 end if
end Sub
</script>
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
 <INPUT type="radio" name="rad" value="M" checked id="rad1" runat="server">
 <INPUT type="radio" name="rad" value="W" id="rad2" runat="server">
 <INPUT type="submit" value="Submit" id="Submit1" OnServerClick="SubmitClick" name="Submit1" runat="server" onclick>
 <DIV id="DIV1" runat="server">
</DIV>
</form>
</body>
</HTML>

Als nächstes ergänzen wir unser Formular um eine Textbox(HTML INPUT). Nach einem Click auf den Button steht der Inhalt der Textbox weiter zur Verfügung. Dies muss in ASP manuell gecoded werden. Das Geheimnis lüftet sich ein wenig, wenn Sie einen Blick in den Source der Website werfen. Dazu einfach im Browser rechte Maustaste und View Source wählen. Es müsste etwas ähnliches wie folgt zu sehen sein:

<input type="hidden" name= "__VIEWSTATE"value= "dDw2MDQ4MTA2Njc7dDw7bDxpPDI+Oz47bDx0PDts< BR>PGk8OT47PjtsPHQ8cDxsPGlubmVyaHRtbDs+O2w8d2VpYmxpY2g7Pj47Oz47Pj47Pj47bDxyYWQxO3JhZDI7Pj4=" />

Dies ist ein weiteres Feature von ASP.NET eben seine Ansicht als Status zu behalten. Dies wird über ein Hidden Field mit dem Namen.... richtig geraten VIEWSTATE gehandelt wird. Der Inhalt hat nichts mit dem Inhalt der Steuerelemente zu tun. Je mehr Elemente auf der Page desto länger der Inhalt von Viewstate. Dagegen wirkt sich die größe der Daten wie z.B. die Anzahl der Zeichen in einer Textbox nicht aus.

Dieses Verhalten kann aber über das Attribut EnableViewState="false" explizit für jedes Control abgeschaltet werden um z.B. die Ladezeit einer Page zu optimieren.


Natürlich lassen sich auch die unüblichen HTML Controls auf diese Art und weise verwenden. Die Eigenschaften die zur Verfügung stehen sind naturgemäß unterschiedlich. So hat die Input Textbox die Eigenschaft Text, das DIV (siehe oben) innerHTML.

Die nächste Stufe sind die WebForms. Diese zeichnen sich durch eine gänzlich andere Schreibweise aus.
<asp:RadioButtonList id="RadioButtonList1" runat="server"></asp:RadioButtonList>

Die Liste der Controls und deren Funktionen ist wesentlich länger und umfangreicher. Dazu in anderen Artikeln sicher mehr.

Dieser Code bezieht sich auf die Beta 2 des .NET Frameworks.


Erfasst am: 05.09.2001 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=615
© Copyright 2003 ppedv AG - http://www.ppedv.de