Verschachtelte “Masterpages” (RenderSection) in MVC


Es ist sehr einfach in MVC Verschachteltete (nested) “Masterpages” zu erstellen, in MVC handelt es sich hier aber eher um verschachtelte RenderSections die dafür genutzt werden.

Als erstes haben wir da unsere RenderSection in der “_Layout.cshtml” Datei auf diese greift jeder View zurück solange im jeweiligen View keine andere “Masterlayout” Seite angegeben wurde.

In meinem folgenden Beispiel, habe ich eine Untergeordnete Masterpage im “Home” View angelegt “_HomeLayoutMaster.cshtml”. Diese Untergeordnete Masterpage hat selbst die “_Layout.cshtml” als Grundlage und wird in dieser Datei eingebettet.

image

Inhalt der “_Layout.cshtml”

In dieser RenderBody Funktion wird unsere “_HomeLayoutMaster.cshtml” gerendert, wenn Auf Views zugegriffen wird die auf die “_HomeLayoutMaster.cshtml” Datei als Master verweisen.

</pre>
<header>
<div class="content-wrapper">
<div class="float-right">
<ul id="menu">
	<li>@Html.ActionLink("Startseite", "Index", "Home")</li>
	<li>@Html.ActionLink("About", "About", "Home")</li>
	<li>@Html.ActionLink("Kontakt", "Contact", "Home")</li>
</ul>
</div>
</div>
</header>
<div id="body"><section class="content-wrapper main-content clear-fix">@RenderBody()</section></div>
<pre>    

Inhalt der “_HomeLayoutMaster.cshtml”

Unsere “HomeLayoutMaster.cshtml” Datei greift als Master auf unsere “_Layout.cshtml” Datei zurück und alle Dateien die auf unsere “HomeLayoutMaster.cshtml” Datei zurückgreifen, werden hier in der RenderBody Methode gerendert.

@{
    ViewBag.Title = "_HomeLayoutMaster";
    //In der Untergeordneten Masterpage, auf die Mainmasterpage "verweisen"
    Layout = "~/Views/Shared/_Layout.cshtml";
}</pre>
<h2>Untergeordnete Masterpage zur Mainmasterpage</h2>
<pre>
Hier könnte z.B. ein weiteres Menü für den Home Controller stehen.</pre>
<div>@* Hier wird der Content für unsere Untegeordnete Masterpage gerendert. *@ @RenderBody()</div>
<pre>

Inhalt der “About.cshtml”

Die “About.cshtml” Datei wird ganz normal per Action und Controller aufgerufen, hier wird nur als Layoutmaster unsere “_HomeLayoutMaster.cshtml” Datei angegeben und damit wird diese Datei in der RenderBody Methode unserer “_HomeLayaoutMaster.cshtml” Datei gerendert.

@{
    ViewBag.Title = "Info";
    //Wenn die About Seite in unseren untergeordneten Masterpage gerendert werden soll
    //unter Renderbody, dann muss hier als Layout die passende Untergeordnete Masterpage angegeben werden.
    Layout = "~/Views/Home/_HomeLayoutMaster.cshtml";
}</pre>
<h1>Inhalt unserer About Seite</h1>
<pre>

Inhalt der “Index.cshtml”

Diese Datei greift auf die Standard “_Layout.cshtml” Datei zurück und hier wird einfach keine alternative Layout Datei angegeben.

@{
    ViewBag.Title = "Homepage";
    //Da kein Layout angegeben, wird diese Seite direkt unter unserer Standatd Masterseite gerendert
    //der _Layout.cshtml
}

Inhalt der Indexseite

Das Projekt steht auch wie immer unter Codeplex zur Verfügung und kann dort heruntergeladen werden unter:

https://squadwuschel.codeplex.com/

Dann unter “Source Code” –> “Browse” –> “Testprojekte” –> “MvcNestedMasterPages”

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s