Übersicht über ASP.NET-Masterseiten
Aktualisiert: November 2007
Mit ASP.NET-Masterseiten können Sie ein konsistentes Layout für alle Seiten Ihrer Anwendung erstellen. Eine einzelne Masterseite definiert dabei das Aussehen und Standardverhalten, das Sie für alle Seiten oder Gruppen von Seiten in Ihrer Anwendung wünschen. Anschließend können Sie einzelne Seiten erstellen, die den anzuzeigenden Inhalt enthalten. Beim Anfordern einer Inhaltsseite durch den Benutzer werden Inhaltsseite und Masterseite zusammengeführt. Das Ergebnis ist eine Kombination aus dem Inhalt der Inhaltsseite und dem Layout der Masterseite.
Funktionsweise von Masterseiten
Masterseiten bestehen aus zwei Teilen, der Masterseite selbst und einer oder mehrerer Inhaltsseiten.
Hinweis: |
---|
Sie können Masterseiten auch schachteln. Ausführliche Informationen finden Sie unter Geschachtelte ASP.NET-Masterseiten. |
Masterseiten
Eine Masterseite ist eine ASP.NET-Datei mit der Erweiterung .master (zum Beispiel MySite.master) und einem vordefinierten Layout, das statischen Text, HTML-Elemente und Serversteuerelemente enthalten kann. Die Masterseite wird durch eine spezielle @ Master-Direktive gekennzeichnet, welche die für normale .aspx-Seiten verwendete @ Page-Direktive ersetzt. Die Direktive sieht folgendermaßen aus.
<%@ Master Language="VB" %>
<%@ Master Language="C#" %>
Die @ Master-Direktive kann die meisten der Direktiven enthalten, die eine @ Control-Direktive enthalten kann. So enthält zum Beispiel die folgende Masterseitendirektive den Namen einer zugrunde liegenden Codedatei und weist der Masterseite einen Klassennamen zu.
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<%@ Master Language="C#" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
Zusätzlich zur @ Master-Direktive enthält die Masterseite auch alle Top-Level-HTML-Elemente für eine Seite wie zum Beispiel html, head und form. Sie könnten zum Beispiel auf einer Masterseite eine HTML-Tabelle für das Layout, ein img-Element für Ihr Firmenlogo, statischen Text für den Copyright-Hinweis und Serversteuerelemente für das Erstellen der Standardnavigation für Ihre Site verwenden. Sie können alle HTML- sowie beliebige ASP.NET-Elemente als Teil der Masterseite verwenden.
Ersetzbare Platzhalter für Inhalt
Zusätzlich zu dem statischen Text und den Steuerelementen, die auf allen Seiten angezeigt werden, enthält die Masterseite auch ein oder mehrere ContentPlaceHolder-Steuerelemente. Diese Platzhaltersteuerelemente definieren Bereiche, in denen ersetzbarer Inhalt angezeigt wird. Der zugehörige ersetzbare Inhalt wird auf den Inhaltsseiten definiert. Nachdem Sie die ContentPlaceHolder-Steuerelemente definiert haben, könnte eine Masterseite folgendermaßen aussehen.
<% @ Master Language="VB" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
<title>Master page title</title>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td><asp:contentplaceholder id="Main" runat="server" /></td>
<td><asp:contentplaceholder id="Footer" runat="server" /></td>
</tr>
</table>
</form>
</body>
</html>
<%@ Master Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML
1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server" >
<title>Master page title</title>
</head>
<body>
<form id="form1" runat="server">
<table>
<tr>
<td><asp:contentplaceholder id="Main" runat="server" /></td>
<td><asp:contentplaceholder id="Footer" runat="server" /></td>
</tr>
</table>
</form>
</body>
</html>
Inhaltsseiten
Der Inhalt für die Platzhaltersteuerelemente der Masterseite wird durch das Erstellen eigener Inhaltsseiten definiert. Dabei handelt es sich um ASP.NET-Seiten (ASPX-Dateien und optional zugrunde liegende Codedateien), die an eine bestimmte Masterseite gebunden sind. Die Bindung wird unter Verwendung der @ Page-Direktive der Inhaltsseite hergestellt, indem ein MasterPageFile-Attribut hinzugefügt wird, das auf die zu verwendende Masterseite verweist. Eine Inhaltsseite könnte zum Beispiel über die folgende @ Page-Direktive verfügen, die diese Inhaltsseite an die Master1.master-Seite bindet.
<%@ Page Language="VB" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page" %>
<%@ Page Language="C#" MasterPageFile="~/MasterPages/Master1.master" Title="Content Page"%>
Auf der Inhaltsseite wird der Inhalt durch das Hinzufügen von Content-Steuerelementen und das Zuordnen dieser Steuerelemente zu ContentPlaceHolder-Steuerelementen auf der Masterseite erstellt. Zum Beispiel könnte die Masterseite die Platzhalter Main und Footer für Inhalt enthalten. Auf der Inhaltsseite können Sie zwei Content-Steuerelemente erstellen, das erste dem ContentPlaceHolder-Steuerelement Main und das zweite dem ContentPlaceHolder-Steuerelement Footer zuordnen wie in der folgenden Abbildung dargestellt.
Ersetzen von Platzhalterinhalt
Nach dem Erstellen von Content-Steuerelementen können Sie diesen Steuerelementen Text und Steuerelemente hinzufügen. Außer Skriptblöcken für Servercode führen auf einer Inhaltsseite alle Elemente, die sich nicht innerhalb von Content-Steuerelementen befinden, zu Fehlern. Auf Inhaltsseiten können Sie alle Aufgaben ausführen, die auf einer ASP.NET-Seite ausgeführt werden können. Sie können zum Beispiel Inhalt für ein Content-Steuerelement generieren, indem Sie Serversteuerelemente und Datenbankabfragen oder andere dynamische Mechanismen verwenden.
Eine Inhaltsdatei könnte folgendermaßen aussehen:
<% @ Page Language="VB" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
Main content.
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
Footer content.
</asp:content>
[C#]
<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Main" Runat="Server">
Main content.
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Footer" Runat="Server" >
Footer content.
</asp:content>
Die @ Page-Direktive bindet die Inhaltsseite an eine bestimmte Masterseite und definiert einen Titel für diese Seite, der mit der Masterseite zusammengeführt wird. Beachten Sie, dass die Inhaltsseite kein anderes Markup außerhalb der Content-Steuerelemente enthält. (Die Masterseite muss ein head-Element mit dem Attribut runat="server" enthalten, damit die Titeleinstellung zur Laufzeit zusammengeführt werden kann.)
Sie können mehrere Masterseiten erstellen, um verschiedene Layouts für verschiedene Teile Ihrer Site zu definieren. Ebenso kann für jede Masterseite ein eigener Satz von Inhaltsseiten erstellt werden.
Vorteile von Masterseiten
Die von Masterseiten gebotene Funktionalität haben die Entwickler bisher durch das wiederholte Kopieren von vorhandenem Code, Text und Steuerelementen realisiert, wobei sie Framesets, Include-Dateien für häufig verwendete Elemente, ASP.NET-Benutzersteuerelemente usw. verwendet haben. Zu den Vorteilen der Masterseiten zählt unter anderem Folgendes:
Sie ermöglichen die zentrale Speicherung häufig verwendeter Funktionen Ihrer Seiten, sodass Sie Aktualisierungen nur noch an einer Stelle vornehmen müssen.
Sie erleichtern die Erstellung eines Satzes von Steuerelementen und Codes und ermöglichen die Anwendung auf einen Satz von Seiten. Sie können zum Beispiel Steuerelemente auf der Masterseite verwenden, um ein auf allen Seiten angezeigtes Menü zu erstellen.
Sie geben Ihnen feingranulare Kontrolle über das Layout der endgültigen Seite, indem Sie festlegen können, wie die Platzhaltersteuerelemente gerendert werden.
Sie bieten ein Objektmodell, dass Ihnen die Anpassung der Masterseite von individuellen Inhaltsseiten aus ermöglicht.
Laufzeitverhalten von Masterseiten
Zur Laufzeit werden Masterseiten auf folgende Art und Weise behandelt:
Benutzer fordern eine Seite durch Eingabe der URL der Inhaltsseite an.
Nach dem Abrufen der Seite wird die @ Page-Direktive gelesen. Wenn die Direktive auf eine Masterseite verweist, wird die Masterseite ebenfalls abgerufen. Wenn dies das erste Mal ist, dass die Seiten angefordert worden sind, werden beide Seiten kompiliert.
Die Masterseite mit dem aktualisierten Inhalt wird mit der Steuerelementstruktur der Inhaltsseite zusammengeführt.
Der Inhalt jedes einzelnen Content-Steuerelements wird mit dem zugehörigen ContentPlaceHolder-Steuerelement auf der Masterseite zusammengeführt.
Die dabei entstehende zusammengeführte Seite wird an den Browser gerendert.
Der Prozess wird im folgenden Diagramm dargestellt.
Masterseiten zur Laufzeit
Aus Sicht des Benutzers sind die kombinierten Master- und Inhaltsseiten eine einzige Seite. Die Seite erhält die URL der Inhaltsseite.
Aus Sicht des Programmierers fungieren die beiden Seiten als separate Container für ihre jeweiligen Steuerelemente. Die Inhaltsseite fungiert als Container für die Masterseite. Sie können allerdings im Code auf der Inhaltsseite auf öffentliche Masterseitenmember verweisen. Dieses Vorgehen wird im nächsten Abschnitt beschrieben.
Beachten Sie, dass die Masterseite ein Teil der Inhaltsseite wird. Im Grunde ähnelt die Funktionsweise der Masterseite stark der Funktionsweise eines Benutzersteuerelements als untergeordnetes Element der Inhaltsseite und als Container innerhalb dieser Seite. In diesem Fall ist die Masterseite jedoch der Container für alle Serversteuerelemente, die an den Browser gerendert werden. Die Steuerelementstruktur einer zusammengeführten Master- und Inhaltsseite sieht ungefähr so aus:
Page
Master Page
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)
ContentPlaceHolder
Content page markup and server controls
(Master page markup and controls)
Dieses Diagramm ist eine vereinfachte Darstellung. Wenn die Inhaltsseite nicht über zugehörige Content-Steuerelemente verfügt, kann die Masterseite auch Markup und Steuerelemente in den ContentPlaceHolder-Steuerelementen enthalten.
Im Allgemeinen hat diese Struktur keinen Effekt auf die Art und Weise, wie Sie Ihre Seiten erstellen oder programmieren. In einigen Fällen kann das Festlegen einer seitenübergreifenden Eigenschaft auf der Masterseite das Verhalten der Inhaltsseite beeinflussen, da die Masterseite das übergeordnete Element ist, das den Steuerelementen auf der Seite am nächsten steht. Wenn Sie zum Beispiel die EnableViewState-Eigenschaft auf der Inhaltsseite auf true festlegen, aber dieselbe Eigenschaft auf der Masterseite auf false festlegen, wird der Ansichtszustand effektiv deaktiviert, da die Einstellung auf der Masterseite Priorität hat.
Masterseiten- und Inhaltsseitenpfade
Bei der Anforderung einer Inhaltsseite wird der Inhalt mit der Masterseite zusammengeführt und die Seite im Kontext der Inhaltsseite ausgeführt. Wenn Sie zum Beispiel die CurrentExecutionFilePath-Eigenschaft des HttpRequest-Objekts abrufen, ob auf der Inhaltsseite oder auf der Masterseite, so stellt der Pfad den Speicherort der Inhaltsseite dar.
Die Masterseite und die Inhaltsseite müssen sich nicht im gleichen Ordner befinden. Solange das MasterPageFile-Attribut in der @ Page-Direktive der Inhaltsseite auf eine .master-Seite verweist, kann ASP.NET die Inhalts- und die Masterseite zu einer einzigen gerenderten Seite zusammenführen.
Verweisen auf externe Ressourcen
Sowohl die Inhaltsseite als auch die Masterseite können Steuerelemente und Elemente enthalten, die auf externe Ressourcen verweisen. So könnten zum Beispiel beide Seiten Bildsteuerelemente enthalten, die auf Bilddateien verweisen, oder sie könnten Anker enthalten, die auf andere Seiten verweisen.
Die zusammengeführte Inhalts- und Masterseite besitzt den Kontext der Inhaltsseite. Dies kann die Angabe von URLs für Ressourcen wie Bilddateien und Zielseiten in Ankern beeinflussen.
Serversteuerelemente
In Serversteuerelementen auf Masterseiten ändert ASP.NET die URLs von Eigenschaften dynamisch, die auf externe Ressourcen verweisen. So könnten Sie zum Beispiel ein Image-Steuerelement auf einer Masterseite platzieren und dessen ImageUrl-Eigenschaft als relativ zur Masterseite festlegen. Zur Laufzeit ändert ASP.NET die URL, sodass sie im Kontext der Inhaltsseite korrekt aufgelöst wird.
ASP.NET kann URLs in den folgenden Fällen ändern:
Die URL ist eine Eigenschaft eines ASP.NET-Serversteuerelements.
Die Eigenschaft wird intern im Steuerelement als URL markiert. (Die Eigenschaft wird mit dem UrlPropertyAttribute-Attribut markiert.) In der Praxis werden Eigenschaften von ASP.NET-Serversteuerelementen auf diese Weise markiert, die für den Verweis auf externe Ressourcen verwendet werden.
Andere Elemente
ASP.NET kann keine URLs in Elementen ändern, die keine Serversteuerelemente sind. Wenn Sie zum Beispiel auf einer Masterseite ein img-Element verwenden und dessen src-Attribut auf eine URL festlegen, kann ASP.NET die URL nicht ändern. In diesem Fall wird die URL im Kontext der Inhaltsseite aufgelöst und die entsprechende URL erstellt.
Im Allgemeinen wird bei der Arbeit mit Elementen auf Masterseiten die Verwendung eines Serversteuerelements empfohlen, auch für Elemente, die keinen Servercode erfordern. Verwenden Sie zum Beispiel anstelle eines img-Elements ein Image-Serversteuerelement. Auf diese Weise kann ASP.NET URLs korrekt auflösen, und Sie können Wartungsprobleme vermeiden, die beim Verschieben der Master- oder der Inhaltsseite auftreten könnten.
Weitere Informationen zum Angeben von Pfaden für ASP.NET-Serversteuerelemente finden Sie unter ASP.NET-Websitepfade.
Masterseiten und Designs
Sie können ASP.NET-Designs nicht direkt auf eine Masterseite anwenden. Beim Hinzufügen eines Designattributs zur @ Master-Direktive führt die Ausführung der Seite zu einem Fehler.
Designs können unter folgenden Bedingungen auf Masterseiten angewendet werden:
Wenn ein Design auf der Inhaltsseite definiert wird. Masterseiten werden im Kontext von Inhaltsseiten aufgelöst, sodass das Design der Inhaltsseite auch auf die Masterseite angewendet wird.
Wenn die Site als Ganzes durch eine Designdefinition im pages-Element (ASP.NET-Einstellungsschema)-Element für die Verwendung eines Designs konfiguriert wurde.
Weitere Informationen finden Sie unter Übersicht über ASP.NET-Designs und ASP.NET-Skins.
Festlegen des Gültigkeitsbereichs von Masterseiten
Inhaltsseiten können auf drei Ebenen an eine Masterseite angefügt werden:
Auf Seitenebene Sie können eine Seitendirektive auf jeder Inhaltsseite verwenden, um diese an eine Masterseite zu binden wie im folgenden Codebeispiel gezeigt.
<%@ Page Language="VB" MasterPageFile="MySite.Master" %>
<%@ Page Language="C#" MasterPageFile="MySite.Master" %>
Auf Anwendungsebene Sie können alle ASP.NET-Seiten (ASPX-Dateien) der Anwendung automatisch an eine Masterseite binden, indem Sie eine Einstellung im pages-Element der Konfigurationsdatei der Anwendung (Web.config) vornehmen. Das Element könnte folgendermaßen aussehen.
<pages masterPageFile="MySite.Master" />
Bei Anwendung dieser Strategie werden alle ASP.NET-Seiten der Anwendung mit der angegebenen Masterseite zusammengeführt, die über ein Content-Steuerelement verfügen. (Wenn eine ASP.NET-Seite keine Content-Steuerelemente enthält, wird die Masterseite nicht angewendet.)
Auf Ordnerebene Diese Strategie ähnelt der Bindung auf Anwendungsebene mit dem Unterschied, dass Sie die Einstellung nur in der Datei Web.config in einem Ordner vornehmen. Die Masterseitenbindungen gelten dann nur für die ASP.NET-Seiten in diesem Ordner.
Siehe auch
Aufgaben
Gewusst wie: Verweisen auf Inhalte der ASP.NET-Masterseite
Gewusst wie: Verweisen auf Inhalte der ASP.NET-Masterseite