Individualschulungen
Entwicklung
Aktuelle Themen
.NET
JavaScript / TypeScript
Java
Programmiersprachen
Entwicklungswerkzeuge
Benutzeroberflächen / User Experience
Softwareengineering
KI in der Softwareentwicklung
Plattformen & Systeme
KI
Web & Cloud
Apps / Mobilplattformen
Datenbanken / Reporting / BI
Betriebssysteme & Virtualisierung
Microsoft Server-Produkte
Scripting
Windows & Office für Anwender
Soft Skills & IT-Recht
Das bieten nur wir
Umfangreicher Themenkatalog
Wählen Sie aus 1055 Themen
Weiterbildungsphilosophie
Individuelle Anpassung an Ihre Anforderungen
Didaktische Konzepte
Ganz nach Ihren Wünschen
Vorteile individueller Firmenseminare
Im Vergleich zu offenen Seminaren
Vor Ort oder online
Alles ist in Ihrem Hause oder online möglich
Top-Trainer
Die besten und renommiertesten Experten
Teilnehmerfeedback
Das sagen 9311 von insgesamt über 75000 Teilnehmern
Referenzkunden
Viele namhafte mittlere und große Referenzkunden
1055 Themen, die frei anpassbar und kombinierbar sind
Gesamter Themenkatalog →
Offene Schulungen
Online-Trainings
.NET-Akademie
.NET/C#-Basisseminar
WPF
WinUI
.NET MAUI, Uno & Avalonia
Blazor
ASP.NET Core WebAPI
Entity Framework Core
Unit Testing / TDD
PowerShell
Alle Seminartermine
INFOTAGE
INFOTAG ".NET 12.0"
am 22.06.2027
INFOTAG "KI" 2027
am 15.09.2027
Das bieten nur wir
Renommierte Top-Trainer
Die besten und bekanntesten Experten schulen Sie!
Teilnehmerfeedback
Das sagen 9311 von insgesamt über 75000 Teilnehmern
Referenzkunden
Viele namhafte mittlere und große Referenzkunden
Nicht das passende Thema dabei? Stellen Sie Ihre individuelle Firmenschulung aus 1055 Modulen zusammen!
Individualschulungen →
Beratung, Support & Entwicklung
Alle unsere Leistungen
Beratung
Beratung zu vielen technischen und methodischen Themen
Coaching
Projektbegleitende Unterstützung
Softwareentwicklung
Wir entwickeln einzelne Module oder ganze Anwendungen für Sie
Technischer Support
Support für einzelne technische Fragen
Individualschulungen
1055 Themen, die frei anpassbar und kombinierbar sind
Offene Seminare
Ausgewählte Themen bieten wir auch als öffentliche Online-Schulungen an.
Beratungsthemen
Anwendungsarchitektur
Datenbankzugriff/Data Access
DevOps
Frontend, GUI, UX
IT-Infrastruktur
Leistung/Performance
Machbarkeit und Prototyping
Methodik, Prozesse, Teamarbeit
Migration und Versionsumstieg
Mobilanwendungen
Reviews und Qualitätssicherung
Sicherheit/Security
Verteilte Systeme und Services
Webtechniken
Werkzeugauswahl
Weitere Themen
Auch alle Schulungsthemen sind als Beratung möglich!
Das bieten nur wir
Renommierte Top-Berater
Durch Vorträge und Veröffentlichungen sehr bekannte Experten
Referenzkunden
Viele namhafte mittlere und große Referenzkunden
Referenzprojekte
Zahlreiche Referenzprojekte
Beratung vor Ort oder remote – flexibel nach Bedarf.
Zu den Beratungsthemen →
Wissen
Publikationen & Vorträge
Fachbücher
Fachartikel
Konferenzvorträge
Weblog
Spickzettel/Cheat Sheets
Lexikon/Glossar
Programmcodebibliothek
Fallbeispiele
Newsletter
Downloads
Themenportale
Übersicht
.NET/C#/Visual Studio
.NET 11.0
.NET 10.0
.NET 9.0
.NET 8.0
ASP.NET (Core)/Blazor
PowerShell
Versionshistorie
Konferenzen/Events
Community-/Leserportal
Suche
Themenkatalog
Tag Cloud
Volltextsuche
Site Map
FAQs
Schulungen, Beratung, Support, Coaching, Softwareentwicklung
Unsere kommerziellen Leistungen →
Über uns
Unternehmen
Zahlen
Selbstdarstellung
Kernkompetenzen
Dr. Holger Schwichtenberg
Unsere Top-Experten
Leitung & Kundenteam
Partner
Weitere Websites
Referenzen
Referenzkunden
Kundenaussagen
Referenzprojekte
Kontakt & Rechtliches
Kontakt
Impressum
Datenschutzerklärung, Haftung, Urheberrecht, Barrierefreiheit
Impressum, Datenschutz und Barrierefreiheit unter Kontakt & Rechtliches.
Rechtliches →
Erklärung des Begriffs: ASP.NET Razor View Engine (Razor)
Begriff
ASP.NET Razor View Engine
Abkürzung
Razor
Eintrag zuletzt aktualisiert am
24.03.2022
Zur Stichwortliste unseres Lexikons
Was ist
ASP.NET Razor View Engine
?
ASP.NET Razor View Engine (Razor) ist die in ASP.NET verwendete Vorlagensprache für Webseiten, bei der man C# oder
Visual Basic .NET
-Fragmente in
HTML
-Seiten einbetten kann. Programmcodeblöcke werden dabei mit dem Zeichen @ eingeleitet (im Kontrast zur klassischen ASP.NET View Engine, die die Codeblöcke in <% %> einrahmen musste).
Es ist erstmal im Januar 2011 erschienen als Teil von
ASP.NET MVC
und
ASP.NET Webpages
/Webmatrix.
Mittlerweile verwendet auch in
ASP.NET Core
MVC,
ASP.NET Core
Razor Pages und ASP.NET
Blazor
.
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>
Razor-Ausdrücke
Ausgabe ist
HTML
Encoded
@ausgabe
Ausgabe ist nicht Encoded
@Html.Raw(ausgabe)
Durch das Leerzeichen ist der Punkt reiner Text.
Dies ist die @anz. Seite!
Hier werden jeweils Klammern @(…) gebraucht!
Dies ist die @(anz).Seite!
Ergebnis: @(anz * 10 + 2)
@(new Autor().GetInfo<string>())
Escape für @
Die
Variable
@@anz enthält @anz.
Variable
ndeklaration
@{int gesamt = ViewBag.GesamtAnzahl; }
Razor-Ausdrücke in
HTML
-
Attribut
en
Wenn cssklasse null ist, verschwindet das class-
Attribut
:
@{ string cssklasse = "intro"; }
<div class="@cssklasse">Text</div>
Aber nicht, wenn es weitere Werte gibt:
<div class="@cssklasse kursiv">Text</div>
Aus true wird hier checked="checked":
@{ var aktiv = true; }
<input type="checkbox" checked="@aktiv" />
Razor-Blöcke
@* Dies ist ein
Kommentarblock *@
@{ // Codeblock
int anz = 5; string ausgabe = "<i>kursiv</i>";
var orte = new List<string>() { "Essen","Dortmund","Bochum" };
}
@{ // Codeblock mit Markup-Inhalt
int schrittweite = 2;
for (int i = 0; i < anz; i += schrittweite)
{ <div>@start.AddDays(i)</div> }
}
@{ // Reiner Text im Codeblock
for (int i = 0; i < anz; i += schrittweite)
{ <text> Seite @i
noch mehr reiner Text
</text> }
}
@{ // Reiner Text im Codeblock (Alternative Schreibweise)
for (int i = 0; i < anz; i += schrittweite)
{ @: Seite @i
@: noch mehr reiner Text
} // Klammer muss in diesem Fall in getrennte Zeile!
}
Razor-Schleifen
for-Schleife
@for (int i = 0; i < anz; i++)
{ <div>@start.AddDays(i)</div> }
while-Schleife
@while (anz*10 < 100)
{ anz++;
<div>@(anz*10)% erledigt</div> }
foreach-Schleife
@foreach (var ort in orte)
{ <a href="/flug/@ort/0/10">@ort</a> }
Razor-Bedingungen
@if (anz > 100)
{ <text>reiner Text</text> }
else
{ <div>Tag und Ausdruck @anz</div> }
Razor-Funktionen
@functions
{
string GetProzent(int anz)
{ return anz.ToString() + "%"; }
}
Erledigt sind @GetProzent(10);
Razor-Helper
(nicht in
ASP.NET Core
!)
@helper GetProzent(int anz)
{ <i>@anz%</i> }
Erledigt sind @GetProzent(10)
HTML
-Helper für Formulare
@{ var orteItems = orte.Select(x => new SelectListItem { Text = x, Value = x }) .ToList(); }
@using (Html.BeginForm("Neu", "Flug", FormMethod.Post)){
@Html.ValidationSummary("Fehleingaben:")
<div> FlugNr @Html.
TextBox
For(x => x.FlugNr, new { @class = "form-control", disabled="disabled" })
@Html.ValidationMessageFor(x => x.FlugNr, "", new { @class = "text-danger" })
}
Abflugort: @Html.
DropDownList
For(x => x.Abflugort, orteItems,
"offen", new { @class = "form-control" }) <br />
Nichtraucherflug: @Html.
CheckBox
For(x => x.NichtRaucherFlug,
new { @class = "form-control" }) <br />
<button type="submit">Speichern</button></div> }
Weitere: @Html.ActionLink(), @Html.Hidden(), @Html.
ListBox
(), @Html.Password(), @Html.Radio
Button
(), @Html.TextArea() Modellgetrieben: @Html.EditorFor(), @Html.ValueFor(), @Html.DisplayFor(), @Html.LabeFor()
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
Direktive
n 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
Methode
n 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
max.mustermann@@musterdomain.de
würde demnach zur Ausgabe der Email-Adresse
[email protected]
führen. In einigen wenigen Fällen tut sich Razor schwer damit, das Ende eines
Methode
nnamens 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
Visual Basic .NET (VB.NET)
ASP.NET Webpages
DropDownList
ASP.NET Core
Razor-Helper
Direktive
Variable
Attribut
CheckBox
Methode
ListBox
TextBox
Button
Blazor
Symbol
ASP.NET Model View Controler (ASP.NET MVC)
Hypertext Markup Language (HTML)
Beratung & Support
ASP.NET (Core)-Leistung / ASP.NET (Core)-Performance
Benutzerschnittstellentechnik auswählen (UI-/Frontend-Techniken)
Anfrage für Beratung/Consulting zu ASP.NET RAZOR VIEW ENGINE RAZOR
Gesamter Beratungsthemenkatalog
Technischer Support zum Thema ASP.NET RAZOR VIEW ENGINE RAZOR
Schulungen
ASP.NET Core 10.0/11.0: komplettes Wissen - mit MVC, Razor Pages, Blazor, WebAPIs und gRPC
.NET 8.0 - Änderungen und Neuerungen gegenüber .NET 7.0
.NET Akademie: Blazor-Hands-On: Echte Single-Page-Web-Apps mit .NET und C# entwickeln (3-Tages-Agenda des öffentlichen Seminars)
ASP.NET Core 10.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 9.0
ASP.NET Core 11.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 10.0
ASP.NET Core 7.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 6.0
ASP.NET Core 9.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 8.0
ASP.NET Core 8.0 - Änderungen und Neuerungen gegenüber ASP.NET Core 7.0
ASP.NET Model View Controller (ASP.NET MVC) und ASP.NET WebAPI für ASP.NET MVC 5.x oder ASP.NET MVC Core 10.0/11.0
Blazor (Blazor United und/oder Blazor SSR und/oder Blazor WebAssembly und/oder Blazor Server und/oder Blazor Hybrid)
Moderne Web-Anwendungen mit ASP.NET (Core) MVC, WebAPI, HTML5.x/CSS3 und JavaScript-/TypeScript-Frameworks
Neuerungen in .NET Core 2.1/2.2 gegenüber Version 2.0 (inkl. ASP.NET Core, Entity Framework Core)
Neuerungen in .NET Core 3.0/3.1 gegenüber Version 2.x (inkl. ASP.NET Core, Entity Framework Core, WPF und Windows Forms)
Umstieg auf .NET 10.0/11.0 - Entwicklerworkshop mit allen Anwendungsgebieten (Umstellung/Migration von klassischem .NET Framework zu .NET 10.0/11.0)
Umstieg auf ASP.NET Core 10.0/11.0-Webanwendungen in .NET 10.0/11.0 (Umstellung/Migration von klassischen ASP.NET-Webanwendungen auf ASP.NET Core)
Umstieg von .NET-Desktop-Entwicklung (WPF/Windows Forms) auf Webentwicklung (ASP.NET/ASP.NET Core + JavaScript/TypeScript mit Webframeworks wie Angular, Vue.js oder React)
Anfrage für eine individuelle Schulung zum Thema ASP.NET RAZOR VIEW ENGINE RAZOR
Gesamter Schulungsthemenkatalog
Fachbücher
Webanwendungen mit ASP.NET MVC und Razor
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr