Sie sind hier: Startseite | Wissen
Werbung
Begriff ASP.NET Razor View Engine
Abkürzung Razor
Eintrag zuletzt aktualisiert am 01.05.2018

 Zur Stichwortliste unseres Lexikons

Was ist ASP.NET Razor View Engine?

ASP.NET Razor View Engine (Razor) ist eine Syntax für dynamische Webseiten im Rahmen von ASP.NET MVC und ASP.NET Webpages/Webmatrix.
Es ist erstmal im Januar 2011 erschienen als Teil von ASP.NET MVC und ASP.NET Webpages/Webmatrix. Programmcodeblöcke werden dabei mit dem Zeichen @ eingeleitet (im Konstrast zur klassischen ASP.NET View Engige, die die Codeblöcke in <% %> einrahmen musste).

In einigen Fällen ist eine Klammerung @(…) notwendig, z.B.
Text für den @(i).Absatz.
<a href="detailseite@(i).cshtml">Mehr…</a>

Beispiele


@{

Layout = "~/_SiteLayout.cshtml";
Page.Title = "Startseite";
string name = "Holger";
var Icons = new List<string> { "one", "two", "three" };
}

@section featured {
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1>Willkommen!</h1>
<h2>@Page.Title.</h2>
</hgroup>
<p>
<p>Hallo @name, es ist jetzt @DateTime.Now.ToShortTimeString()!</p>
</p>
</div>
</section>
}

<h3>Das sind die aktuellen Themen:</h3>

<ol class="round">

@for (int i = 1; i < 4; i++)
{
<li class="@Icons[i-1]">
<h5>Überschrift @i</h5>
Text für den @(i).Absatz.
<a href="detailseite@(i).cshtml">Mehr…</a>
</li>
}

</ol>


Details zu Razor (von Manfred Steyer)

Die View-Engine, welche seit ASP.NET MVC 3 zum Rendern von Views standardmäßig zum Einsatz kommt und den Namen Razor trägt, verwendet das Symbol @, um serverseitige Anweisungen einzuleiten. Es wird dabei entweder einer Kontrollstruktur oder eine Variable bzw. Eigenschaft oder Methode vorangestellt, deren (Rückgabe-)Wert an Ort und Stelle in die View zu übernehmen ist. Mit @Html können zahlreiche Hilfsfunktionen aufgerufen werden.

Das Schöne ist, dass Razor alle Werte, die es auf diese Weise ausgibt, automatisch HTML-codiert, was Sicherheitslücken und anderen ungewollten Effekten vorbeugt. Möchte der Entwickler einen Text ohne HTML-Codierung ausgeben, muss er auf die Funktion @Html.Raw zurückgreifen:
@Html.Raw("<b>Html-formatierter Text</b>")
Anweisungen, die keinen Wert liefern, können auf diese Weise nicht aufgerufen werden. Allerdings können diese in Blöcken, die der Entwickler zur serverseitigen Ausführung markiert, platziert werden:
@{
ViewBag.Title = "Hotels";
RenderAction("MyAction")
int i = 7;
}
Das Symbol @ wird auch zum Einleiten von Direktiven verwendet, die in der Regel am Beginn einer Datei platziert werden. Die Direktive @model wurde bereits in der Einführung verwendet. Sie legt fest, von welchem Typ das Modell ist. Mit
@model FirstSteps.Models.Hotel
legt der Entwickler zum Beispiel fest, dass das Modell der aktuellen View vom Typ FirstSteps.Models.Hotel ist. Eine weitere nützliche Direktive ist die Direktive @using. Sie erlaubt es die benötigten Namensräume zu referenzieren und kann somit mit dem gleichnamigen Schlüsselwort in C# verglichen werden. Die Angabe von
@using FirstSteps.Models
bindet zum Beispiel den Namensraum FirstSteps.Models ein. Mit Vorsicht zu genießen ist die Direktive @functions. Sie erlaubt es, innerhalb eines Blocks beliebige Methoden zu definieren:
@functions {
private bool HaveLuck(bool needLuck) { return !needLuck; }
}
<b>Lucky:</b> @HaveLuck(true)
Bei ihrer Verwendung in Views darf man sich zu Recht fragen, ob dadurch nicht zu viel Logik in die View verlagert wird bzw. ob diese Logik nicht woanders besser aufgehoben wäre. In Razor-Helper oder in Vorlagen (siehe unten) kann sie hingegen schon zur Lesbarkeit beitragen.
Möchte der Entwickler tatsächlich das Symbol @ ausgeben, muss er es doppelt angeben. Die Anweisung
h.schwichtenberg@@it-visions.de
würde demnach zur Ausgabe der Email-Adresse H.Schwichtenberg@it-visions.de führen. In einigen wenigen Fällen tut sich Razor schwer damit, das Ende eines Methodennamens zu entdecken. Dies ist beispielsweise bei
@Model.Vorname.Schwichtenberg@@it-visions.de
der Fall. Hier kann Razor nicht entdecken, dass Schwichtenberg keine Eigenschaft von Vorname ist sondern lediglich ein Text, den es auszugeben gilt. Abhilfe schafft hier das Setzen von Klammern:
@(Model.Vorname).Schwichtenberg@@it-visions.de
Razor erkennt an den meisten Stellen automatisch den Übergang zwischen serverseitigen Code und clientseitigem Markup. Bei der Anweisung
@for(int i=0; i<10; i++) { <b>@i</b> }
wird zum Beispiel erkannt, dass die schließende geschweifte Klammer zur serverseitigen Schleife gehört sowie, dass es sich beim b-Tag um Markup handelt, der auszugeben ist. Die Logik dahinter ist vom Prinzip her einfach: Immer dann, wenn ein Tag beginnt, geht Razor davon aus, dass nun ein clientseitiger Block folgt. Dies ist auch der Grund, warum
@for(int i=0; i<10; i++) { Hallo Welt! }
nicht korrekt ausgeführt werden kann, denn »Hallo Welt« befindet sich nicht in einem Tag und wird somit als serverseitiger Befehl wahrgenommen. Um dieses Problem zu umgehen, müsste der Entwickler diesen Text in einem beliebigen Tag kapseln. Bietet sich kein Tag an, kann er auf das von Razor vorgegebene Tag text zurückgreifen:
@for(int i=0; i<10; i++) { <text>Hallo Welt!</text> }
Dieses Tag erlaubt es Razor, den Beginn von clientseitigen Elementen zu erkennen. Darüber hinaus filtert Razor das Tag, sodass es sich nicht in der Ausgabe wiederfindet.
Eine sehr angenehme Eigenschaft von Razor ist die Tatsache, dass die Tilde (~) in Pfadangaben durch den Pfad des Roots der aktuellen Webanwendung ersetzt wird. Ist das Root der Webanwendung zum Beispiel /myApp, so wird eine Angabe von
<img src="~/img/myImage.png">
durch
<img src="/myApp/img/myImage.png">
ersetzt.
Zu guter Letzt erlaubt Razor auch die Definition von serverseitigen Kommentaren. Diese werden durch die Sequenz @* eingeleitet sowie mit *@ beendet:
@* Das ist ist ein Kommentar *@

Querverweise zu anderen Begriffen im Lexikon

MVC
HTML
ASP.NET
MVC
ASP
Razor-Helper
Direktive
Variable
Methode
Symbol

Beratung & Support:

Schulungen zu diesem Thema:

 Anfrage für eine individuelle Schulung zum Thema ASP.NET Razor View Engine;Razor  Gesamter Schulungsthemenkatalog

Bücher zu diesem Thema:

 Alle unsere aktuellen Fachbücher