![]() |
|
|||||
Tabelle 10.1 Attribute der Control-Direktive 10.1.3 Die Register-Direktive für Benutzersteuerelemente verwenden
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Eigenschaften | ||||
| Application | HttpApplicationState | Stellt das Application-Objekt zur Verfügung | ||
| Attributes | AttributeCollection | Eine Auflistung der Attribut-Wert-Paare, die in der aspx-Datei im Tag für das Benutzersteuerelement definiert sind | ||
| Cache | Cache | Das Cache-Objekt, das der Anwendung zugeordnet ist, in der das Benutzersteuerelement eingesetzt wird | ||
| IsPostBack | Boolean | True, wenn das Benutzersteuerelement als Antwort auf ein Postback geladen wird | ||
| Request | HttpRequest | Das Request-Objekt der aktuellen Anforderung | ||
| Response | HttpResponse | Das Response-Objekt der aktuellen Anforderung | ||
| Server | HttpServerUtility | Das Server-Objekt der aktuellen Anforderung | ||
| Session | HttpSessionState | Das Session-Objekt der aktuellen Anforderung | ||
| Trace | TraceContext | Das TraceContext-Objekt der aktuellen Anforderung | ||
| Methoden | ||||
| InitializeAsUserControl(Page) | Initialisiert das UserControl-Objekt, z. B. myControl.InitializeAsUserControl(Me) |
|||
| MapPath(virtualPath As String) | String | Ordnet dem virtuellen Verzeichnis den absoluten Dateipfad zu | ||
Tabelle 10.2 Steckbrief der Klasse UserControl
Das erste Beispiel für ein Benutzersteuerelement war sehr einfach, es enthielt nur statischen HTML-Code. Als Nächstes lernen Sie, beim Aufruf eines Benutzersteuerelements so etwas wie eine Variable zu übergeben, wodurch das Benutzersteuerelement flexibler wird. Programmtechnisch gesehen definieren Sie für die Klasse des Benutzersteuerelements eine Eigenschaft. Beim Aufruf des Benutzersteuerelements in der aspx-Seite legen Sie die Eigenschaft fest, indem Sie ein entsprechendes Attribut angeben.
Wenn Sie das Benutzersteuerelement für die Copyright-Angabe beispielsweise auf mehreren Websites verwenden wollen, dann wäre es praktisch, wenn der Name des Rechteinhabers variabel wäre.
So definieren Sie eine variable Eigenschaft für ein Benutzersteuerelement:
1. In der ascx-Datei fügen Sie im Skript-Abschnitt den nötigen Code hinzu, mit dem für eine Klasse eine Eigenschaft definiert wird. Für das Beispiel benötigen Sie eine Eigenschaft Firmenname. Das erweiterte Steuerelement bekommt den Namen copyright_02.ascx und hat diese Form.
<!-- copyright_02.ascx -->
<%@ Control Language="VB" Debug="True" Strict="True" %>
<script runat="server">
Private strFirma As String
Public Property Firmenname() As String
Get
Firmenname = strFirma
End Get
Set (ByVal inFirmenname As String)
strFirma = inFirmenname
End Set
End Property
</script>
<hr><center>© <% = Firmenname %> 2002, 2003</center>
Diese Definition der Eigenschaft Firmenname ist streng nach der objektorientierten Lehre entworfen. Mit Private strFirma As String deklarieren Sie zunächst eine private Variable, auf die nur die Klasse selbst Zugriff hat. Den öffentlichen Zugriff auf die Eigenschaft Firmenname ermöglichen Sie über die Property-Anweisung. Im HTML-Abschnitt des Benutzersteuerelements wird der Firmenname über eine einfache Inline-Anweisung eingefügt.
2. user_03.aspx ruft das erweiterte Benutzersteuerelement auf, indem das Skript im mlohrer:copyright-Element das Attribut Firmenname="Matthias Lohrer" hinzufügt.
<!-- user_03.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Register tagprefix="mlohrer" tagname="copyright"
Src="copyright_02.ascx" %>
<html><head>
<title>Benutzersteuerelemente verwenden</title>
</head><body>
<h1>Benutzersteuerelemente verwenden</h1>
<p>Hier steht der Text ...</p>
<mlohrer:copyright runat="server"
Firmenname="Matthias Lohrer" />
</body></html>
In Benutzersteuerelementen können Sie ähnlich wie in aspx-Seiten auf Ereignisse reagieren. Wenn Sie in einem Benutzersteuerelement etwa Webserversteuerelemente einfügen, können Sie hier auch die benötigten Ereignisroutinen definieren. Auch Page_Load ist beispielsweise verfügbar. Ereignisse wie Page_Load und andere werden an die aufrufende aspx-Seite weitergeleitet, wenn in der Control-Direktive des Benutzersteuerelements die Standardeinstellung AutoEventWireup=True nicht verändert wurde.
Das folgende Beispiel demonstriert zwei Dinge. Zum einen sehen Sie, wie Sie Webserversteuerelemente in Ihren Benutzersteuerelementen verwenden können. Als Nebeneffekt erkennen Sie, dass Sie ein Benutzersteuerelement in eine Seite auch mehrfach einbinden können, ohne dass Sie diesen Fall im Code des Benutzersteuerelements selbst berücksichtigen müssten.
Viele Websites bieten die Option an, einen Newsletter zu abonnieren. Auf Ihrer Website möchten Sie verschiedene Newsletter anbieten und diese Option außerdem auf mehreren Seiten zur Verfügung stellen. Eine bestimmte Funktionalität wird also in jeweils leichter Abwandlung an mehreren Stellen benötigt, so dass die Realisierung als Benutzersteuerelement nahe liegt.

Hier klicken, um das Bild zu Vergrößern
Abbildung 10.1 Jedes Benutzersteuerelement bearbeitet seine Ereignisse selbst.

Hier klicken, um das Bild zu Vergrößern
Abbildung 10.2 Mehrfach eingebundene Benutzersteuerelemente erhalten im HTML-Code eindeutig unterscheidbare Namen.
user_04.ascx realisiert ein Benutzersteuerelement für ein solches E-Mail-Abo. user_04.aspx bindet das Benutzersteuerelement zweimal ein. Abbildung 10.1 zeigt die Darstellung von user_04.aspx im Browser und Abbildung 10.2 zeigt den erzeugten HTML-Quellcode.
<!-- user_04.aspx -->
<%@ Page Language="VB" Debug="True" Strict="True" %>
<%@ Register Tagprefix="mlohrer" Tagname="emailabo"
Src="user_04.ascx" %>
<html><head>
<title>Benutzersteuerelemente verwenden</title>
</head><body>
<h3>Wählen Sie einen Newsletter aus!</h3>
<form runat="server">
<mlohrer:emailabo runat="server"
Newsletterthema="Alles über Wellensittiche" />
<mlohrer:emailabo runat="server"
Newsletterthema="Alles über Hauskatzen" />
</form>
</body>
</html>
<!-- user_04.ascx -->
<%@ Control Language="VB" Strict="True" Debug="True" %>
<script runat="server">
Private txtThema As String
Public Property Newsletterthema() As String
Get
Newsletterthema = txtThema
End Get
Set (ByVal inThema As String)
txtThema = inThema
End Set
End Property
Public Sub emailabo (ByVal Sender As Object, _
ByVal E As CommandEventArgs)
ausgabe.InnerHtml ="Sie erhalten den Newsletter<b> "
ausgabe.InnerHtml += Newsletterthema
ausgabe.InnerHtml += " </b>an die Adresse <b>"
ausgabe.InnerHtml += txtEMail.value
ausgabe.InnerHtml += "</b>."
End Sub
Sub Page_Load (ByVal Sender As Object, _
ByVal E As EventArgs)
Beschreibung.innerHtml = txtThema
End Sub
</script>
<p style="background-color:#eeeeee;height:70pt" >
<b id="Beschreibung" runat="server" ></b><br>
<input type="text"
id="txtEMail"
value="Ihre E-Mail-Adresse"
runat="server">
<asp:Button Text="News abonnieren"
runat="server"
OnCommand="emailabo" /> <br>
<span id="ausgabe" runat="server" />
</p>
Der HTML-Teil des Benutzersteuerelements fasst alle Ausgabeelemente in einem einzelnen p-Element zusammen. Über das Attribut style="background-color:#eeeeee;height:70pt" bekommt der Absatz eine feste Höhe und einen hellgrauen Hintergrund zugewiesen. Für die Beschreibung wird ein b-Element zur Verfügung gestellt. Es folgen ein input-Element und ein asp:Button-Element für die Eingabe der E-Mail-Adresse. Für eine Feedback-Meldung wird ein span-Element bereitgestellt.
Beim Laden der aspx-Seite, in die dieses Benutzersteuerelement eingebunden wird, wird auch die Page_Load-Prozedur dieses Benutzersteuerelements ausgeführt. Dabei bekommt die Beschreibung die Variable txtThema zugewiesen.
txtThema ist eine private Variable, die nach außen über die Eigenschaft Newsletterthema zur Verfügung steht. Innerhalb der aspx-Seite wird das Newsletterthema gesetzt, indem bei der Deklaration ein entsprechendes Attribut angegeben wird:
<mlohrer:emailabo runat="server"
Newsletterthema="Alles über Hauskatzen" />
Wenn der Anwender seine E-Mail-Adresse eingibt und News abonnieren anklickt, dann wird die Prozedur emailabo() ausgeführt. Innerhalb dieser Prozedur erstellt das Beispiel keine komplette E-Mail-Verwaltung, sondern gibt lediglich eine Meldung zur Bestätigung aus.
Beim Blick auf den HTML-Code wird auch klar, wie ASP.NET mit mehreren Benutzersteuerelementen auf einer Seite umgeht. ASP.NET vergibt für die input type="submit"-Elemente automatisch ein name-Attribut, so dass es die unterschiedlichen E-Mail-Abos voneinander unterscheiden kann.
| << zurück |
| ||||||||||||
| ||||||||||||
| ||||||||||||
| ||||||||||||
| ||||||||||||
| ||||||||||||
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.