Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...

News

Die ASP.NET-MasterPage ist keine “Hauptseite”

Wieder ein Thema aus den Foren. Sowohl auf den ASP.NET Zone Foren als auch im Web-Technologie Forum auf myCSharp werden immer wieder Fragen gestellt, die darauf hinweisen, dass der Fragesteller nicht weis, dass es sich bei der ASP.NET-MasterPage nicht um eine dynamische Webseite handelt.

Dabei es beschreibt der erste Absatz der MSDN Dokumentation zu den Masterpages absolut treffend: Übersicht über ASP.NET-Masterseiten

Hier mal genannte Absatz “zerhackstückelt” und erklärt.

Zital: "Mit ASP.NET-Masterseiten können Sie ein konsistentes Layout für alle Seiten Ihrer Anwendung erstellen."

Das heißt, mit der MasterPage wird in erster Linie ein Layout für alle oder mehrere Seiten der Webanwendung erstellt. Die MasterPage sollte als erst mal nur das reine HTML-Grundgerüst enthalten. Das macht die Masterpage vorerst zu einem Template, mehr nicht.

Ich persönlich gehe immer so vor, dass ich das gesamte Layout einer Website in dieser Masterpage erstelle. Erst anschließen schaue ich mit das Ergebnis an und entscheide was dynamischer Content ist. Dieser wird durch dann ContentPlaceHolder ersetzt.

Zital: "Eine einzelne Masterseite definiert dabei das Aussehen und Standardverhalten, das Sie für alle Seiten oder Gruppen von Seiten in Ihrer Anwendung wünschen."

Wie oben beschrieben, definiert eine MasterPage in erster Linie das Aussehen. Was die MasterPage nun von herkömmlichen Tempaltes unterscheidet sind Standardverhalten und Funktionalitäten die dort definiert werden können.

Ich versuche so wenig Funktionalität wie möglich in die Masterpage zu bringen. Wenn es doch mal sein muss, lagere ich diese Funktionalitäten in ein UserControl, oder CustomControl aus. Ich prüfe ob diese Funktionalität wirklich auf allen Seiten benötigt wird. Wenn ja, wird das Control direkt eingebunden. Wenn nicht, so werden die Controls innerhalb eines ContentPlaceHolders plaziert, wo sie dann bequem über die Inhaltseiten ausgeblendet werden können. Die CodeBehind Datei der Masterpage sollte so gut wie möglich frei von zusätzlichen Codes sein.

Zital: "Anschließend können Sie einzelne Seiten erstellen, die den anzuzeigenden Inhalt enthalten."

Das ist einer der entscheidenden Sätze: Es müssen ASPX-Dateien (Inhaltsseiten) erstellt werden, die den anzuzeigenden Inhalt enthalten. Ohne Inhaltsseite bringt die beste MasterPage nichts. Die Inhaltsseite entscheidet welche MasterPage überhaupt verwendet wird:

<% @ Page Language="C#" MasterPageFile="~/Master.master" Title="Content Page 1" %>

Eine Inhaltsseite ist eine ASPX-Datei, welche – wie oben gezeigt – eine MasterPageFile Angabe über die @Page-Direktive enthält und deren Inhalt sich innerhalb eines Content Steuerelements befindet.

Zital: "Beim Anfordern einer Inhaltsseite durch den Benutzer werden Inhaltsseite und Masterseite zusammengeführt."

Es wird in keinem Fall die MasterPage vom Client aufgerufen, sondern immer eine Inhaltsseite. Die ASP.NET Engine führt dann beide Dateien (Inhaltseite und Masterpage) auf dem Webserver zusammen:


(Quelle: MSDN: Übersicht über ASP.NET-Masterseiten)

Zital: "Das Ergebnis ist eine Kombination aus dem Inhalt der Inhaltsseite und dem Layout der Masterseite."

Das fertige Ergebnis wird dann als HTML Datei an den anfragenden Browser gesendet.

Fazit: Die MasterPage sollte nur als dynamisches Template gesehen werden. Auf keinen Fall als Container für alle Funktionalitäten. Und nicht als “Hauptseite” die andere Seite in die ContentPlaceholder hinein lädt. Es sollte absolut keinen Grund geben von der MasterPage auf Inhaltsseiten zuzugreifen und es sollten nach Möglichkeit Gründe vermieden werden von den Inhaltsseiten auf die MasterPages zuzugreifen. Sollten dennoch Funktionalitäten auf mehreren Seiten zur Verfügung gestellt werden ist eine Basisklasse für die Inhaltsseiten wesentlich sinnvoller.

Der Grund für die Verwirrung, liegt wahrscheinlich in der Namensgebung. MasterPage wird fälschlicherweise oft mit “Hauptseite” übersetzt. Dabei ist die MasterPage keine Seite im Sinne einer Webseite. MasterPage sollte auch nicht (wie leider in der MSDN geschrieben) mit Masterseite übersetzt werden, denn auch das suggeriert eine Webseite. Haupttemplate, Hauptvorlage wären aus meiner Sicht die sinnigsten und am wenigsten verwirrenden Bezeichnungen.

Posted: Dienstag, 10. März 2009 16:59 von Jürgen Gutsch

Kommentare

Keine Kommentare

Anonyme Kommentare sind nicht zugelassen