![]() |
Comelio GmbH
|
Comelio-Blog > C#.NET > Code-Behind ASP.NET und die Code-Behind-Technologie
ASP.NET - Code Behind-TechnologieFür ein einfaches Einstiegsbeispiel wird eine neue Webseite benötigt, die in unserem Fall Klassen heißen soll. Dann sollte die standardmäßig vorhandene default.aspx-Datei unbenannt werden in eine Datei mit einem aussagekräftigen Namen wie 311_01.aspx. Zu dieser Datei sehen Sie im Projektmappen-Explorer auch eine Plus-Schaltfläche, welche die Sicht auf die so genannte Code-Behind-Datei freigibt. Dies ist – ganz kurz gesagt – die eigentliche Skriptdatei hinter der aspx-Datei mit Behandlungsroutinen für die verschiedenen Ereignisse, die beim Laden der Datei auftreten und abgefangen werden können, sowie Behandlungsroutinen für die Formularverarbeitung, Sitzungsbehandlung und sonstiger Anwendungsbausteine, die die Web-Applikation betreffen. Ziel dieser Datei ist, die Trennung von Layout und Anwendungslogik. In den Beispielen des vorherigen Kapitels wurde dies ausdrücklich nicht genutzt, soll nun aber regelmäßig eingesetzt werden. Der Name Code Behind soll ausdrücken, dass in dieser Datei tatsächlich der hinterlegte Quelltext verborgen ist, der hinter dem Layout steckt, welches in der aspx-Seite statisch vorhanden ist. Dies kann wie jetzt nur aus dem einfachen HTML-Gerüst bestehen, könnte aber genauso gut auch komplexe Menü-Leisten beinhalten. In dieser Code-Behind-Datei erstellen wir nun die verschiedenen Klassen, welche für unsere Anwendung notwendig ist. Dazu bindet man zunächst die verschiedenen Namensräume für (Web-)Anwendungen ein, was dem Paket-Import in Java und einer Datei-Verknüpfung in PHP entsprechen würde. In diesen Namensräumen können sich mehreren Klassen befinden. Die Liste im Beispiel wurde vom Visual Studio automatisch erstellt und ist für unsere Zwecke nicht nur ausreichend, sondern zunächst viel zu umfangreich. In der Datei befinden sich dann weiterhin zwei Klassen, von denen die zweite einer Klasse entspricht, wie man sie in ein anderen Programmiersprache auch erstellt hätte, um später ein Objekt vom Typ Person instanziieren zu können. Die erste Klasse jedoch stellt die Basisklasse der eigentlichen Anwendung bzw. der Datei 311_01.aspx dar und heißt Visitenkarte. In dieser Klasse erstellen wir – jetzt hier sehr verkürzt - unser eigentliches Programm, das das Ereignis des Seitenladens mit einer Behandlungsmethode versieht. Diese sieht vor, dass ein Textplatzhalter auf der Seite zwischen den beiden body-Tags in HTML mit einer Zeichenkette gefüllt wird, die aus einem Gruß unseres Objekts besteht. using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class Visitenkarte : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Person anton = new Person();
anton.setzeName();
ausgabe.Text = anton.sageHallo();
ausgabe.Text += "Code-Behind-Datei
In der Datei, welche man nachher im Browser aufruft, befindet sich weiterhin allerhand HTML-Quelltext. Zwei Zeilen sind allerdings für die Anwendung von herausragender Bedeutung. Dies ist zum einen die Seitendirektive (es gibt wie in Java Server Pages oder PL/SQL Server Pages noch andere Direktiven) und zum anderen ein spezieller Tag aus dem Namensraum asp. In dieser Seitendirektive stehen nun allerhand Informationen, die für die Verarbeitung der Anwendung im Sprachmodul des Webservers bedeutsam sind: die Seitensprache wird mit C# angegeben; die Seitenereignisse werden automatisch zugewiesen; die Code-Behind-Datei heißt 311_01.aspx.cs; die Seite erbt von der Klasse Visitenkarte aus dieser Datei. Der seltsam aussehende Spezialtag ist das einfachste aus einer ganzen Reihe von Tags, die in einer aspx-Seite auftreten können und dient dazu, Text an seiner Stelle auszugeben. Da ja das Layout von der Anwendungslogik getrennt ist, müssen wir die Ausgabe des Grußes unseres Person-Objekts mit Hilfe dieser Technik platzieren. Würden wir darauf verzichten, könnten wir den Gruß zwar dennoch lesen, er sähe auch auf dieser einfachen Seite vordergründig nicht anders aus, aber im Quelltext würde man erkennen, dass er in der allerersten Quelltextzeile steht. Dieses so genannte Web Control-Element hat unterschiedliche Attribute, von denen allerdings an dieser Stelle nur ID für die Angabe des Namens und den Aufruf einer möglichen CSS-Klasse sowie runat für die Angabe, dass auf dem Server eine Verarbeitung stattfinden soll, hier zu verwenden sind. Aus einem solchen Web Control-Element wird – wie aus vielen anderen solchermaßen geschriebenen Spezialtags – bei der Ausführung ein Objekt mit den Feldwerten, die hier als Attribute auftreten. Im Visual Studio sind diese Attribute / Felder zudem auch Eigenschaften in einem Menü, in dem sie einfach ausgefüllt werden können. <%@ Page Language="C#" AutoEventWireup="true"
CodeFile="311_01.aspx.cs" Inherits="Visitenkarte" %>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Visitenkarte</title>
</head>
<body>
<!-- Ziel der Ausgabe -->
<asp:Label ID="ausgabe" runat="server"/>
</body>
</html>
Eigentliche aspx-Seite
Hat man alle Dateien beisammen und keine Syntax-Fehler produziert, erhält man eine HTML-Seite, in der der nachfolgende Quelltext zu finden ist. Da, wie gerade beschrieben, auch ohne das Label-Element der Gruß erscheint, ist es wichtig zu notieren, dass er natürlich zwischen den body-Elementen erscheinen muss und nicht irgendwo auf der Seite. <html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Visitenkarte</title>
</head>
<body>
<!-- Ziel der Ausgabe -->
<span id="ausgabe">Hallo, ich bin Anton
Ebenhof.<br>Ciao, sagt Anton Ebenhof</span>
</body>
</html>
Ausgabe im Browser an der angegebenen Stelle
Da die gesamte Konstruktion beim ersten Mal natürlich brüchig ist und vermutlich mehr schief gehen als funktionieren kann, haben wir noch einmal die verschiedenen Dateien in eine Zeichnung gesteckt und mit Beschriftungen versehen. Dabei ist zu bemerken, wie die aspx-Seite mit Hilfe von CodeFile die Datei mit der Basisklasse der Seite aufruft und mit Inherits eine Klasse daraus aufruft. In dieser Klasse wiederum sitzt eine Behandlungsroutine für eines der wichtigsten Ereignisse, die bei einer Seite auftreten und auch abgefangen werden kann, nämlich die Page_Load-Methode. Der Klassenname Visitenkarte dient dazu, dass das Inherits-Attribut eine passende Klasse finden kann, von der die Seite abgeleitet wird. In dieser Behandlungsroutine für die Seite wird zunächst ein Objekt von der Klasse Person instanziiert, die sich ebenfalls in der Code-Behind-Datei befindet. Theoretisch könnte sich diese Klasse auch im Order App_Data in einem speziellen Namensraum befinden, aber so ist es am einfachsten und erfordert weniger Dateien. Da die beiden Methoden sageHallo und liefereName jeweils Zeichenketten zurückliefern, kann man diese auch anstelle des Labels Ausgabe ausgeben. Wie gerade schon erwähnt, wird ein Objekt Ausgabe instanziiert, weil die Angabe des Labels über asp:Label nichts Anderes als ein Objekt-Aufruf im HTML-Stil ist (wie in Java Server Pages) ist. Dieses Objekt hat verschiedene Felder, von denen eines das Feld Text ist. Hier lässt sich die Zeichenkette abspeichern, die beim Ausliefern der Seite an seiner Stelle im HTML-Quelltext finden wird. Dieses offensichtlich sehr nützliche Feld füllen wir mit den Rückgabewerten der beiden Methoden sageHallo und liefereName sowie einigen weiteren Textbausteine auf.
Zusammenhänge zwischen den Dateien und Benennungen
|
||