Webframeworkk/ASP.NET Core/Razor Views: Unterschied zwischen den Versionen

Aus Dokument
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „ Basierend auf der Analyse von ''start.txt'' enthält dieses Dokument Tutorials und Erklärungen zu den Kernkonzepten von ASP.NET Core MVC, einschließlich Architektur, Views, Razor-Syntax, Datenübergabe und der Erstellung wiederverwendbarer Komponenten. == Inhaltsverzeichnis == # MVC Architektur # Views in ASP.NET Core # Razor View Engine # Lokale Funktionen in Razor # Html.Raw() # ViewData und ViewBag # Streng typisierte View…“
 
imported>Import
Version 185
Zeile 1: Zeile 1:
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
----
----


Basierend auf der Analyse von ''start.txt'' enthält dieses Dokument Tutorials und Erklärungen zu den Kernkonzepten von ASP.NET Core MVC, einschließlich Architektur, Views, Razor-Syntax, Datenübergabe und der Erstellung wiederverwendbarer Komponenten.
Basierend auf der Analyse von ''start.txt'' enthält dieses Dokument Tutorials und Erklärungen zu den Kernkonzepten von ASP.NET Core MVC, einschließlich Architektur, Views, Razor-Syntax, Datenübergabe und der Erstellung wiederverwendbarer Komponenten.
== Inhaltsverzeichnis ==
# [[MVC Architektur]]
# [[Views in ASP.NET Core]]
# [[Razor View Engine]]
# [[Lokale Funktionen in Razor]]
# [[Html.Raw()]]
# [[ViewData und ViewBag]]
# [[Streng typisierte Views]]
# [[ViewImports.cshtml]]
# [[Geteilte Views (Shared Views)]]
----


== MVC Architektur ==
== MVC Architektur ==
Zeile 23: Zeile 9:


=== 1. Model (Modell) ===
=== 1. Model (Modell) ===
Repräsentiert die Daten und die Geschäftslogik der Anwendung.
Repräsentiert die Daten und die Geschäftslogik der Anwendung.
* '''Business Model (Domänenmodell)''': Repräsentiert reale Entitäten (z. B. Produkt, Kunde) und die Kerngeschäftslogik/-validierung.
* '''Business Model (Domänenmodell)''': Repräsentiert reale Entitäten (z. B. Produkt, Kunde) und die Kerngeschäftslogik/-validierung.
* '''View Model''': Ein maßgeschneidertes Modell, das speziell für eine View entworfen wurde. Es kann Daten aus mehreren Geschäftsmodellen aggregieren oder UI-spezifische Eigenschaften enthalten.
* '''View Model''': Ein maßgeschneidertes Modell, das speziell für eine View entworfen wurde. Es kann Daten aus mehreren Geschäftsmodellen aggregieren oder UI-spezifische Eigenschaften enthalten.


=== 2. View (Ansicht) ===
=== 2. View (Ansicht) ===
Verantwortlich für das Rendern der Benutzeroberfläche (UI).
Verantwortlich für das Rendern der Benutzeroberfläche (UI).
* Typischerweise definiert in ''.cshtml''-Dateien unter Verwendung der Razor-Syntax.
* Typischerweise definiert in ''.cshtml''-Dateien unter Verwendung der Razor-Syntax.
* Generiert dynamisch HTML basierend auf den vom Controller bereitgestellten Daten.
* Generiert dynamisch HTML basierend auf den vom Controller bereitgestellten Daten.


=== 3. Controller (Steuerung) ===
=== 3. Controller (Steuerung) ===
Arbeitet als Vermittler zwischen dem Model und der View.
Arbeitet als Vermittler zwischen dem Model und der View.
* Empfängt Benutzereingaben (HTTP-Anfragen).
* Empfängt Benutzereingaben (HTTP-Anfragen).
* Interagiert mit dem Model, um Operationen durchzuführen oder Daten abzurufen.
* Interagiert mit dem Model, um Operationen durchzuführen oder Daten abzurufen.
Zeile 39: Zeile 31:


=== Ablauf der Ausführung ===
=== Ablauf der Ausführung ===
# '''Routing''': Die Anfrage wird an einen bestimmten Controller und eine Action-Methode weitergeleitet.
# '''Routing''': Die Anfrage wird an einen bestimmten Controller und eine Action-Methode weitergeleitet.
# '''Model Binding''': Daten aus der Anfrage werden extrahiert und in Parameter umgewandelt.
# '''Model Binding''': Daten aus der Anfrage werden extrahiert und in Parameter umgewandelt.
Zeile 48: Zeile 41:


=== MVC aktivieren ===
=== MVC aktivieren ===
In ''Program.cs'' wird der MVC-Service registriert:
In ''Program.cs'' wird der MVC-Service registriert:
<syntaxhighlight lang="csharp">
 
builder.Services.AddControllersWithViews();
<syntaxhighlight lang="csharp">builder.Services.AddControllersWithViews();</syntaxhighlight>
</syntaxhighlight>
Dies aktiviert die Controller-Erkennung, die Razor View Engine, Model Binding und Validierung.
Dies aktiviert die Controller-Erkennung, die Razor View Engine, Model Binding und Validierung.


----
 
-----


== Views in ASP.NET Core ==
== Views in ASP.NET Core ==
Zeile 64: Zeile 58:
* '''ViewResult''': Eine Controller-Action gibt typischerweise ein ''ViewResult'' unter Verwendung der ''View()''-Hilfsmethode zurück.
* '''ViewResult''': Eine Controller-Action gibt typischerweise ein ''ViewResult'' unter Verwendung der ''View()''-Hilfsmethode zurück.


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">public IActionResult Index()
public IActionResult Index()
{
{
     // Sucht standardmäßig nach Views/Home/Index.cshtml
     // Sucht standardmäßig nach Views/Home/Index.cshtml
     return View();  
     return View();  
}
}</syntaxhighlight>
</syntaxhighlight>


----
-----


== Razor View Engine ==
== Razor View Engine ==
Zeile 79: Zeile 71:


=== Wichtige Syntax-Elemente ===
=== Wichtige Syntax-Elemente ===
* '''Code-Blöcke''': <code>@{ ... }</code> für mehrzeilige C#-Ausführung.
* '''Code-Blöcke''': <code>@{ ... }</code> für mehrzeilige C#-Ausführung.
* '''Ausdrücke''': <code>@variable</code> oder <code>@(ausdruck)</code>, um Werte auszugeben.
* '''Ausdrücke''': <code>@variable</code> oder <code>@(ausdruck)</code>, um Werte auszugeben.
Zeile 84: Zeile 77:


=== Kontrollfluss ===
=== Kontrollfluss ===
Razor unterstützt Standard-C#-Kontrollflussstrukturen:
Razor unterstützt Standard-C#-Kontrollflussstrukturen:


'''If/Else''':
'''If/Else''':
<syntaxhighlight lang="razor">
 
@if (Model.IsActive)
<pre class="razor">@if (Model.IsActive)
{
{
     <p>Aktiv</p>
     &lt;p&gt;Aktiv&lt;/p&gt;
}
}
else
else
{
{
     <p>Inaktiv</p>
     &lt;p&gt;Inaktiv&lt;/p&gt;
}
}</pre>
</syntaxhighlight>
'''Schleifen (Loops)''':


'''Schleifen (Loops)''':
<pre class="razor">@foreach (var item in Model.Items)
<syntaxhighlight lang="razor">
@foreach (var item in Model.Items)
{
{
     <li>@item.Name</li>
     &lt;li&gt;@item.Name&lt;/li&gt;
}
}</pre>
</syntaxhighlight>
'''Switch''':


'''Switch''':
<pre class="razor">@switch (Model.Status)
<syntaxhighlight lang="razor">
@switch (Model.Status)
{
{
     case Status.Pending:
     case Status.Pending:
         <span>Ausstehend...</span>
         &lt;span&gt;Ausstehend...&lt;/span&gt;
         break;
         break;
     case Status.Complete:
     case Status.Complete:
         <span>Erledigt!</span>
         &lt;span&gt;Erledigt!&lt;/span&gt;
         break;
         break;
}
}</pre>
</syntaxhighlight>


----
-----


== Lokale Funktionen in Razor ==
== Lokale Funktionen in Razor ==
Zeile 126: Zeile 115:


'''Syntax''':
'''Syntax''':
<syntaxhighlight lang="razor">
 
@functions {
<pre class="razor">@functions {
     public string FormatDate(DateTime date)
     public string FormatDate(DateTime date)
     {
     {
         return date.ToString("yyyy-MM-dd");
         return date.ToString(&quot;yyyy-MM-dd&quot;);
     }
     }
}
}</pre>
</syntaxhighlight>
 
'''Verwendung''':
'''Verwendung''':
<syntaxhighlight lang="razor">
<p>Datum: @FormatDate(DateTime.Now)</p>
</syntaxhighlight>


<pre class="razor">&lt;p&gt;Datum: @FormatDate(DateTime.Now)&lt;/p&gt;</pre>
'''Vorteile''':
'''Vorteile''':
* Hält view-spezifische Logik zusammen.
* Hält view-spezifische Logik zusammen.
* Reduziert Code-Duplizierung innerhalb einer einzelnen View.
* Reduziert Code-Duplizierung innerhalb einer einzelnen View.
* Kann auf andere Mitglieder zugreifen, die im <code>@functions</code>-Block definiert sind.
* Kann auf andere Mitglieder zugreifen, die im <code>@functions</code>-Block definiert sind.


----
 
-----


== Html.Raw() ==
== Html.Raw() ==
Zeile 152: Zeile 139:


'''Verwendung''':
'''Verwendung''':
<syntaxhighlight lang="razor">
 
@{
<pre class="razor">@{
     string htmlContent = "<strong>Fetter Text</strong>";
     string htmlContent = &quot;&lt;strong&gt;Fetter Text&lt;/strong&gt;&quot;;
}
}
@Html.Raw(htmlContent)
@Html.Raw(htmlContent)</pre>
</syntaxhighlight>
'''Warnung''':


'''Warnung''':
* '''Sicherheitsrisiko''': Verwenden Sie dies nur mit vertrauenswürdigen Daten. Verwenden Sie <code>Html.Raw()</code> niemals mit Benutzereingaben, es sei denn, diese wurden streng bereinigt (sanitized), da dies die Anwendung für XSS-Angriffe öffnet.
* '''Sicherheitsrisiko''': Verwenden Sie dies nur mit vertrauenswürdigen Daten. Verwenden Sie <code>Html.Raw()</code> niemals mit Benutzereingaben, es sei denn, diese wurden streng bereinigt (sanitized), da dies die Anwendung für XSS-Angriffe öffnet.


----
 
-----


== ViewData und ViewBag ==
== ViewData und ViewBag ==
Zeile 169: Zeile 156:


=== ViewData ===
=== ViewData ===
* Typ: ''ViewDataDictionary'' (Schlüssel-Wert-Dictionary).
* Typ: ''ViewDataDictionary'' (Schlüssel-Wert-Dictionary).
* Erfordert Typumwandlung (Casting) für komplexe Typen.
* Erfordert Typumwandlung (Casting) für komplexe Typen.
* '''Verwendung''':
* '''Verwendung''':
<syntaxhighlight lang="csharp">
 
// Controller
<syntaxhighlight lang="csharp">// Controller
ViewData["Title"] = "Startseite";
ViewData["Title"] = "Startseite";


// View
// View
<h1>@ViewData["Title"]</h1>
<h1>@ViewData["Title"]</h1></syntaxhighlight>
</syntaxhighlight>
=== ViewBag ===


=== ViewBag ===
* Typ: ''dynamic''.
* Typ: ''dynamic''.
* Ein Wrapper um ''ViewData''.
* Ein Wrapper um ''ViewData''.
* Keine Typumwandlung erforderlich (wird zur Laufzeit geprüft).
* Keine Typumwandlung erforderlich (wird zur Laufzeit geprüft).
* '''Verwendung''':
* '''Verwendung''':
<syntaxhighlight lang="csharp">
 
// Controller
<syntaxhighlight lang="csharp">// Controller
ViewBag.Title = "Startseite";
ViewBag.Title = "Startseite";


// View
// View
<h1>@ViewBag.Title</h1>
<h1>@ViewBag.Title</h1></syntaxhighlight>
</syntaxhighlight>
'''Best Practice''': Verwenden Sie ''Streng typisierte Views'' (ViewModels) für Hauptdaten. Verwenden Sie ViewData/ViewBag nur für kleine, nebensächliche Daten (wie Seitentitel).


'''Best Practice''': Verwenden Sie ''Streng typisierte Views'' (ViewModels) für Hauptdaten. Verwenden Sie ViewData/ViewBag nur für kleine, nebensächliche Daten (wie Seitentitel).


----
-----


== Streng typisierte Views ==
== Streng typisierte Views ==
Zeile 202: Zeile 188:


'''Syntax''':
'''Syntax''':
# Definieren Sie den Modelltyp oben in der View:
# Definieren Sie den Modelltyp oben in der View:
<syntaxhighlight lang="razor">
 
@model MyProject.Models.Person
<pre class="razor">@model MyProject.Models.Person</pre>
</syntaxhighlight>
# Greifen Sie über die <code>Model</code>-Eigenschaft auf Daten zu:
# Greifen Sie über die <code>Model</code>-Eigenschaft auf Daten zu:
<syntaxhighlight lang="razor">
<p>Name: @Model.Name</p>
</syntaxhighlight>


<pre class="razor">&lt;p&gt;Name: @Model.Name&lt;/p&gt;</pre>
'''Controller''':
'''Controller''':
<syntaxhighlight lang="csharp">
 
public IActionResult Details()
<syntaxhighlight lang="csharp">public IActionResult Details()
{
{
     var person = new Person { Name = "John" };
     var person = new Person { Name = "John" };
     return View(person);
     return View(person);
}
}</syntaxhighlight>
</syntaxhighlight>
'''View Models''': Es ist üblich, spezifische Klassen (View Models) zu erstellen, die Daten aus mehreren Entitäten aggregieren oder Daten speziell für die View formatieren.


'''View Models''':
<syntaxhighlight lang="csharp">public class PersonProductViewModel
Es ist üblich, spezifische Klassen (View Models) zu erstellen, die Daten aus mehreren Entitäten aggregieren oder Daten speziell für die View formatieren.
<syntaxhighlight lang="csharp">
public class PersonProductViewModel
{
{
     public Person Person { get; set; }
     public Person Person { get; set; }
     public Product Product { get; set; }
     public Product Product { get; set; }
}
}</syntaxhighlight>
</syntaxhighlight>


----
-----


== ViewImports.cshtml ==
== ViewImports.cshtml ==
Zeile 237: Zeile 217:


'''Häufige Verwendungen''':
'''Häufige Verwendungen''':
* '''Namespaces''': <code>@using MyProject.Models</code> (damit Sie es nicht zu jeder View hinzufügen müssen).
* '''Namespaces''': <code>@using MyProject.Models</code> (damit Sie es nicht zu jeder View hinzufügen müssen).
* '''Tag Helpers''': <code>@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers</code>.
* '''Tag Helpers''': <code>@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers</code>.
Zeile 242: Zeile 223:


'''Beispielinhalt''':
'''Beispielinhalt''':
<syntaxhighlight lang="razor">
 
@using MyProject
<pre class="razor">@using MyProject
@using MyProject.Models
@using MyProject.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers</pre>
</syntaxhighlight>
Es beachtet die Hierarchie: Eine ''_ViewImports.cshtml'' in einem Unterordner (''Views/Home/_ViewImports.cshtml'') überschreibt oder ergänzt die Einstellungen der Root-''Views/_ViewImports.cshtml''.


Es beachtet die Hierarchie: Eine ''_ViewImports.cshtml'' in einem Unterordner (''Views/Home/_ViewImports.cshtml'') überschreibt oder ergänzt die Einstellungen der Root-''Views/_ViewImports.cshtml''.


----
-----


== Geteilte Views (Shared Views) ==
== Geteilte Views (Shared Views) ==
Zeile 259: Zeile 239:


'''Häufige Typen''':
'''Häufige Typen''':
# '''Layouts''' (''_Layout.cshtml''): Definiert die gemeinsame Struktur (Header, Footer, Referenzen) für die App.
# '''Layouts''' (''_Layout.cshtml''): Definiert die gemeinsame Struktur (Header, Footer, Referenzen) für die App.
# '''Partial Views''' (''_PartialName.cshtml''): Wiederverwendbare UI-Komponenten (z. B. eine Login-Box, ein Navigationsmenü).
# '''Partial Views''' (''_PartialName.cshtml''): Wiederverwendbare UI-Komponenten (z. B. eine Login-Box, ein Navigationsmenü).


'''Erkennung''':
'''Erkennung''': Wenn ein Controller <code>View(&quot;MyView&quot;)</code> zurückgibt, sucht ASP.NET Core in:
Wenn ein Controller <code>View("MyView")</code> zurückgibt, sucht ASP.NET Core in:
 
# ''Views/[Controller]/MyView.cshtml''
# ''Views/[Controller]/MyView.cshtml''
# ''Views/Shared/MyView.cshtml''
# ''Views/Shared/MyView.cshtml''

Version vom 17. Februar 2026, 22:43 Uhr

Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).


Basierend auf der Analyse von start.txt enthält dieses Dokument Tutorials und Erklärungen zu den Kernkonzepten von ASP.NET Core MVC, einschließlich Architektur, Views, Razor-Syntax, Datenübergabe und der Erstellung wiederverwendbarer Komponenten.

MVC Architektur

Model-View-Controller (MVC) ist ein Entwurfsmuster, das eine Anwendung in drei logische Hauptkomponenten unterteilt:

1. Model (Modell)

Repräsentiert die Daten und die Geschäftslogik der Anwendung.

  • Business Model (Domänenmodell): Repräsentiert reale Entitäten (z. B. Produkt, Kunde) und die Kerngeschäftslogik/-validierung.
  • View Model: Ein maßgeschneidertes Modell, das speziell für eine View entworfen wurde. Es kann Daten aus mehreren Geschäftsmodellen aggregieren oder UI-spezifische Eigenschaften enthalten.

2. View (Ansicht)

Verantwortlich für das Rendern der Benutzeroberfläche (UI).

  • Typischerweise definiert in .cshtml-Dateien unter Verwendung der Razor-Syntax.
  • Generiert dynamisch HTML basierend auf den vom Controller bereitgestellten Daten.

3. Controller (Steuerung)

Arbeitet als Vermittler zwischen dem Model und der View.

  • Empfängt Benutzereingaben (HTTP-Anfragen).
  • Interagiert mit dem Model, um Operationen durchzuführen oder Daten abzurufen.
  • Wählt die geeignete View aus, um die Antwort zu rendern.

Ablauf der Ausführung

  1. Routing: Die Anfrage wird an einen bestimmten Controller und eine Action-Methode weitergeleitet.
  2. Model Binding: Daten aus der Anfrage werden extrahiert und in Parameter umgewandelt.
  3. Model Validation: Daten werden gegen im Model definierte Regeln validiert.
  4. Controller Action: Logik wird ausgeführt (z. B. Datenbankaufrufe).
  5. View Selection: Der Controller wählt eine View aus und übergibt ihr Daten (oft ein Model oder ViewModel).
  6. Rendering: Die View verarbeitet die Daten und generiert HTML.
  7. Response: Valides HTML wird an den Client zurückgesendet.

MVC aktivieren

In Program.cs wird der MVC-Service registriert:

builder.Services.AddControllersWithViews();

Dies aktiviert die Controller-Erkennung, die Razor View Engine, Model Binding und Validierung.



Views in ASP.NET Core

Views sind die Präsentationskomponente der MVC-Anwendung.

  • Ort: Konventionsgemäß befinden sich Views in Views/[ControllerName]/[ActionName].cshtml.
  • Funktion: Sie führen Daten (vom Model/ViewData) mit HTML-Vorlagen zusammen.
  • ViewResult: Eine Controller-Action gibt typischerweise ein ViewResult unter Verwendung der View()-Hilfsmethode zurück.
public IActionResult Index()
{
    // Sucht standardmäßig nach Views/Home/Index.cshtml
    return View(); 
}

Razor View Engine

Razor ist die Markup-Syntax, die in ASP.NET Core Views verwendet wird, um C#-Code in HTML einzubetten.

Wichtige Syntax-Elemente

  • Code-Blöcke: @{ ... } für mehrzeilige C#-Ausführung.
  • Ausdrücke: @variable oder @(ausdruck), um Werte auszugeben.
  • Literale: @: oder <text>...</text>, um rohen Text innerhalb von Code-Blöcken auszugeben.

Kontrollfluss

Razor unterstützt Standard-C#-Kontrollflussstrukturen:

If/Else:

@if (Model.IsActive)
{
    <p>Aktiv</p>
}
else
{
    <p>Inaktiv</p>
}

Schleifen (Loops):

@foreach (var item in Model.Items)
{
    <li>@item.Name</li>
}

Switch:

@switch (Model.Status)
{
    case Status.Pending:
        <span>Ausstehend...</span>
        break;
    case Status.Complete:
        <span>Erledigt!</span>
        break;
}

Lokale Funktionen in Razor

Sie können wiederverwendbare C#-Funktionen direkt innerhalb einer Razor-View unter Verwendung des @functions-Blocks definieren. Dies kapselt Logik, die spezifisch für diese View ist.

Syntax:

@functions {
    public string FormatDate(DateTime date)
    {
        return date.ToString("yyyy-MM-dd");
    }
}

Verwendung:

<p>Datum: @FormatDate(DateTime.Now)</p>

Vorteile:

  • Hält view-spezifische Logik zusammen.
  • Reduziert Code-Duplizierung innerhalb einer einzelnen View.
  • Kann auf andere Mitglieder zugreifen, die im @functions-Block definiert sind.



Html.Raw()

Standardmäßig kodiert Razor alle String-Ausgaben, um XSS (Cross-Site Scripting)-Angriffe zu verhindern. Html.Raw() wird verwendet, um einen String ohne Kodierung zu rendern.

Verwendung:

@{
    string htmlContent = "<strong>Fetter Text</strong>";
}
@Html.Raw(htmlContent)

Warnung:

  • Sicherheitsrisiko: Verwenden Sie dies nur mit vertrauenswürdigen Daten. Verwenden Sie Html.Raw() niemals mit Benutzereingaben, es sei denn, diese wurden streng bereinigt (sanitized), da dies die Anwendung für XSS-Angriffe öffnet.



ViewData und ViewBag

Mechanismen, um kleine Datenmengen vom Controller an die View zu übergeben.

ViewData

  • Typ: ViewDataDictionary (Schlüssel-Wert-Dictionary).
  • Erfordert Typumwandlung (Casting) für komplexe Typen.
  • Verwendung:
// Controller
ViewData["Title"] = "Startseite";

// View
<h1>@ViewData["Title"]</h1>

ViewBag

  • Typ: dynamic.
  • Ein Wrapper um ViewData.
  • Keine Typumwandlung erforderlich (wird zur Laufzeit geprüft).
  • Verwendung:
// Controller
ViewBag.Title = "Startseite";

// View
<h1>@ViewBag.Title</h1>

Best Practice: Verwenden Sie Streng typisierte Views (ViewModels) für Hauptdaten. Verwenden Sie ViewData/ViewBag nur für kleine, nebensächliche Daten (wie Seitentitel).



Streng typisierte Views

Binden Sie eine View direkt an eine spezifische Model-Klasse. Dies bietet IntelliSense, Typsicherheit und Überprüfung zur Kompilierzeit.

Syntax:

  1. Definieren Sie den Modelltyp oben in der View:
@model MyProject.Models.Person
  1. Greifen Sie über die Model-Eigenschaft auf Daten zu:
<p>Name: @Model.Name</p>

Controller:

public IActionResult Details()
{
    var person = new Person { Name = "John" };
    return View(person);
}

View Models: Es ist üblich, spezifische Klassen (View Models) zu erstellen, die Daten aus mehreren Entitäten aggregieren oder Daten speziell für die View formatieren.

public class PersonProductViewModel
{
    public Person Person { get; set; }
    public Product Product { get; set; }
}

ViewImports.cshtml

Eine spezielle Datei, die im Views-Ordner platziert wird, um gemeinsame Direktiven für alle Views in diesem Ordner (und Unterordnern) zu behandeln.

Häufige Verwendungen:

  • Namespaces: @using MyProject.Models (damit Sie es nicht zu jeder View hinzufügen müssen).
  • Tag Helpers: @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers.
  • Layouts: Definieren eines Standard-Layouts.

Beispielinhalt:

@using MyProject
@using MyProject.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

Es beachtet die Hierarchie: Eine _ViewImports.cshtml in einem Unterordner (Views/Home/_ViewImports.cshtml) überschreibt oder ergänzt die Einstellungen der Root-Views/_ViewImports.cshtml.



Geteilte Views (Shared Views)

Views, die über mehrere Controller hinweg wiederverwendbar sind.

  • Ort: Views/Shared/

Häufige Typen:

  1. Layouts (_Layout.cshtml): Definiert die gemeinsame Struktur (Header, Footer, Referenzen) für die App.
  2. Partial Views (_PartialName.cshtml): Wiederverwendbare UI-Komponenten (z. B. eine Login-Box, ein Navigationsmenü).

Erkennung: Wenn ein Controller View("MyView") zurückgibt, sucht ASP.NET Core in:

  1. Views/[Controller]/MyView.cshtml
  2. Views/Shared/MyView.cshtml

Dieser Fallback-Mechanismus ermöglicht es Ihnen, globale Views im Shared-Ordner zu definieren.


Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).