Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Einstieg in ASP.NET von Matthias Lohrer
Einstieg in ASP.NET
gp Kapitel Die Page-Klasse
  gp 5.1 Der Lebenszyklus einer aspx-Seite
    gp 5.1.1 Lebenszyklus beim ersten Aufruf
    gp 5.1.2 Lebenszyklus bei einem Postback
    gp 5.1.3 In Page_Load die Validierung ausführen
  gp 5.2 Die Code-Behind-Technologie
    gp 5.2.1 Die aspx-Seite mit der Code-Behind-Datei verknüpfen
    gp 5.2.2 Die Code-Behind-Datei erstellen
  gp 5.3 Die Page-Direktive
  gp 5.4 Die Controls-Auflistung


Galileo Computing

5.2 Die Code-Behind-Technologie  downtop

ASP.NET kompiliert jede aspx-Seite in eine Klasse, die von der Page-Klasse abstammt. Aufgrund dieses objektorientierten Ansatzes ist es möglich, eine aspx-Seite von einer selbst definierten Basisklasse abzuleiten, die ihrerseits von Page abstammt. Genau das ist die Funktionsweise der Code-Behind-Technologie.

Ein einfaches Beispiel soll das Verfahren illustrieren. Den Ausgangspunkt bildet die folgende einfache aspx-Seite, deren Darstellung im Browser Abbildung 5.3 zeigt.

<!-- codebehind_01.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Public Sub Page_Load (ByVal Sender As Object, _
                      ByVal E As EventArgs)
   Dim s As String
   s = "Heute ist der " 
   s &= DateTime.Now.toShortDateString()
   s &= "."
   lblZeit.Text = s                
End Sub  
</script>
<html>
<head><title>Code-Behind-Beispiel</title></head>
<body>
<h3>Code-Behind-Beispiel</h3>
<p>
<asp:Label id="lblZeit" runat="server" />
</p>
<p>Hier kommt der weitere Inhalt der Seite ...</p>
</body>
</html>

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 5.3 Alle aspx-Seiten sind von der Page-Klasse abgeleitete Objekte.

Beim Aufruf der Seite schreibt die Prozedur Page_Load das aktuelle Datum in das Label-Steuerelement lblZeit. Dieses Feature möchten Sie auf vielen Seiten Ihrer Website verwenden. Eine Möglichkeit neben anderen besteht darin, den erforderlichen Code in eine Code-Behind-Datei auszugliedern.

Indem Sie anschließend Ihre einzelnen Webseiten von dieser Code-Behind-Datei ableiten, können Sie den Code der Basisklasse stets wiederverwenden und auf allen Seiten erscheint das gewünschte Datum.

Zur Realisierung teilen Sie die Bestandteile von codebehind_01.aspx in zwei Dateien auf. codebehind_02.aspx enthält den HTML-Code und eine modifizierte Page-Direktive, die im Anschluss erläutert wird:

<!-- codebehind_02.aspx -->
<%@ Page Inherits="Codebehind_02_baseclass" src="codebehind_02.vb" %>
<html>
<head><title>Code-Behind-Beispiel</title></head>
<body>
<h3>Code-Behind-Beispiel</h3>
<p>
<asp:Label id="lblZeit" runat="server" />
</p>
<p>Hier kommt der weitere Inhalt der Seite ...</p>
</body>
</html>

codebehind_02.vb ist eine reine VB-Datei und enthält den Skript-Anteil mit Anpassungen im Code, die ebenfalls anschließend erläutert werden.

' codebehind_02.vb
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls

Public Class Codebehind_02_baseclass : Inherits Page

Protected lblZeit as Label

Public Sub Page_Load (ByVal Sender As Object, _
                      ByVal E As EventArgs)
   Dim s As String
   s = "Heute ist der " 
   s &= DateTime.Now.toShortDateString()
   s &= "."
   lblZeit.Text = s                
End Sub  

End Class

Galileo Computing

5.2.1 Die aspx-Seite mit der Code-Behind-Datei verknüpfen  downtop

Bei der Datei codebehind_02.aspx stellt sich zunächst die Aufgabe, festzulegen, dass die Seite nicht von der Klasse Page direkt abgeleitet werden soll, sondern von der Klasse, die Sie selbst definiert haben. Das erreichen Sie, indem Sie die Page-Direktive entsprechend anpassen. Über das Inherits-Attribut legen Sie die Klasse fest, von der die Seite abgeleitet werden soll:

<%@ Page Inherits="Codebehind_02_baseclass" ... %>

Als Zweites stellt sich die Frage, in welcher Datei ASP.NET diese Klasse findet. Hier gibt es mehrere Möglichkeiten. Wenn Sie in der Page-Direktive dazu keine Angabe machen, sucht ASP.NET automatisch im /bin-Unterverzeichnis des Applikationsverzeichnisses. Alternativ können Sie mit dem src-Attribut ausdrücklich einen Pfad angeben. Mit der Angabe src="codebehind_02.vb" sucht ASP.NET die Datei codebehind_02.vb beispielsweise im gleichen Verzeichnis, in dem auch die aspx-Seite liegt. So wie die aspx-Seiten vom JIT-Compiler automatisch kompiliert werden, so werden auch die zugrunde liegenden Basisklassen automatisch kompiliert.


Galileo Computing

5.2.2 Die Code-Behind-Datei erstellen  toptop

Die Datei codebehind_02.vb enthält die Definition der Klasse Codebehind_02_baseclass. codebehind_02.vb ist eine reine VB-Datei. Hier treffen Sie nicht auf spitze Klammern, sondern ausschließlich auf VB-Code. Um den Aufbau der Klasse nachvollziehen zu können, soll sie Stück für Stück aufgebaut werden.

Sie wissen bereits, welchen Code die Klasse auf jeden Fall enthalten muss, nämlich die Page_Load-Prozedur mit der gewünschten Funktionalität. Also enthält die Klasse mindestens diesen Code:

Public Sub Page_Load (ByVal Sender As Object, _
                      ByVal E As EventArgs)
   Dim s As String
   s = "Heute ist der " 
   s &= DateTime.Now.toShortDateString()
   s &= "."
   lblZeit.Text = s                
End Sub

Diese Prozedur soll Teil der selbst definierten Klasse Codebehind_02_baseclass sein, die ihrerseits von Page abgeleitet ist. Also müssen Sie die Page_Load-Prozedur in eine Klassendefinition einbetten und es ergibt sich diese Form:

Public Class Codebehind_02_baseclass : Inherits Page
   Public Sub Page_Load (ByVal Sender As Object, _
                         ByVal E As EventArgs)
      Dim s As String
      s = "Heute ist der " 
      s &= DateTime.Now.toShortDateString()
      s &= "."
      lblZeit.Text = s                
   End Sub  
End Class

Die erste Zeile ließe sich auch so formulieren:

Public Class Codebehind_02_baseclass
Inherits Page

Tipp   Die einzeilige Formulierung mit dem Doppelpunkt ist eine syntaktische Alternative, die VB.NET zur Verfügung stellt, um mehrere Zeilen hintereinander in eine Zeile schreiben zu können.

Innerhalb von Page_Load greifen Sie auf das Label-Feld lblZeit zu. Diese Variable müssen Sie innerhalb der Klasse jedoch erst noch verfügbar machen. Also ergänzen Sie eine weitere Zeile Code.

Public Class Codebehind_02_baseclass : Inherits Page
   Protected lblZeit as Label
   Public Sub Page_Load (ByVal Sender As Object, _
                      ByVal E As EventArgs)
      ' ...
      lblZeit.Text = s                
   End Sub  
End Class

Statt mit Protected könnten Sie lblZeit auch mit dem Zugriffsmodifizierer Public ausstatten. Da Sie aber die Basisklasse bearbeiten, von der ihre aspx-Seiten abgeleitet werden, scheint die Wahl von Protected angemessen zu sein.

Wenn Sie eine aspx-Seite erstellen, werden viele Namespaces automatisch importiert, ohne dass Sie diese eigens angeben müssten. Für frei definierten VB-Code gilt das nicht. Sie müssen dem Compiler helfen, solche Klassen wie Page, Label und DateTime korrekt zuzuordnen, indem Sie die benötigten Imports-Anweisungen ergänzen.

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Public Class Codebehind_02_baseclass : Inherits Page
   ' ...
End Class

Der Namespace System ist von grundlegender Art. Hier ist unter anderem auch die Klasse EventArgs zu finden. In System.Web.UI finden Sie die Page-Klasse und System.Web.UI.WebControls benötigen Sie für die Label-Klasse.

Damit ist der Umbau zur Code-Behind-Klasse abgeschlossen. Beim anschließenden Aufruf von codebehind_02.aspx ergibt sich das gleiche Bild wie beim Aufruf von codebehind_01.aspx.

  

Einstieg in VB.NET

VB.NET

Einstieg in C#

Visual C#

VB.NET und Datenbanken

Einstieg in XML




Copyright © Galileo Press GmbH 2003
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de