Inhalt
Vorwort
1 Wie .NET und ASP.NET funktionieren
2 Installation
3 Hinweise zu VB.NET
4 »Hallo, Welt!« – Ein ASP.NET-Crashkurs
5 Die Page-Klasse
6 HTML-Serversteuerelemente
7 Validierung von Anwendereingaben
8 Webserversteuerelemente
9 Webserversteuerelemente für die Darstellung von Listen
10 Webserversteuerelemente selbst erstellen
11 Der Status von Seiten, Sitzungen und Applikationen
12 ASP.NET und Datenbanken
13 »Wer darf was?« ASP.NET und Sicherheit
14 Webanwendungen erstellen und konfigurieren
15 Leistungssteigerung durch Caching
16 Web Services
A Anhang
Index
Download (ca 14,3 MB)
Buch bestellen (29,90 EUR)
Ihre Meinung?@
<< zurück | Galileo Computing / <openbook> / Einstieg in ASP.NET | vor >>
Einstieg in ASP.NET von Matthias Lohrer
| Kapitel 5 Die Page-Klasse
|  | 5.1 Der Lebenszyklus einer aspx-Seite
|  |  | 5.1.1 Lebenszyklus beim ersten Aufruf
|  |  | 5.1.2 Lebenszyklus bei einem Postback
|  |  | 5.1.3 In Page_Load die Validierung ausführen
|  | 5.2 Die Code-Behind-Technologie
|  |  | 5.2.1 Die aspx-Seite mit der Code-Behind-Datei verknüpfen
|  |  | 5.2.2 Die Code-Behind-Datei erstellen
|  | 5.3 Die Page-Direktive
|  | 5.4 Die Controls-Auflistung
## 5.2 Die Code-Behind-Technologie 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>
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
### 5.2.1 Die aspx-Seite mit der Code-Behind-Datei verknüpfen 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. ### 5.2.2 Die Code-Behind-Datei erstellen 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.
<< zurück | <top> | vor >>
Zum Katalog
Einstieg in ASP.NET bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

.NET-Bibliothek
| Einstieg in VB.NET
| VB.NET
| Einstieg in C#
| Visual C#
| VB.NET und Datenbanken

Empfehlung
| Einstieg in XML

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

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