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

Aus Dokument
Zur Navigation springen Zur Suche springen
imported>Import
Version 185
Keine Bearbeitungszusammenfassung
 
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.


== MVC Architektur ==
== MVC Architektur ==
Zeile 9: Zeile 11:


=== 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 31: Zeile 27:


=== 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 41: Zeile 36:


=== MVC aktivieren ===
=== MVC aktivieren ===
In ''Program.cs'' wird der MVC-Service registriert:
In ''Program.cs'' wird der MVC-Service registriert:
 
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">builder.Services.AddControllersWithViews();</syntaxhighlight>
builder.Services.AddControllersWithViews();
</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 58: Zeile 52:
* '''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">public IActionResult Index()
<syntaxhighlight lang="csharp">
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 71: Zeile 67:


=== 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 77: Zeile 72:


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


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


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


-----
----


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


'''Syntax''':
'''Syntax''':
 
<syntaxhighlight lang="razor">
<pre class="razor">@functions {
@functions {
     public string FormatDate(DateTime date)
     public string FormatDate(DateTime date)
     {
     {
         return date.ToString(&quot;yyyy-MM-dd&quot;);
         return date.ToString("yyyy-MM-dd");
     }
     }
}</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 139: Zeile 140:


'''Verwendung''':
'''Verwendung''':
<syntaxhighlight lang="razor">
@{
    string htmlContent = "<strong>Fetter Text</strong>";
}
@Html.Raw(htmlContent)
</syntaxhighlight>


<pre class="razor">@{
    string htmlContent = &quot;&lt;strong&gt;Fetter Text&lt;/strong&gt;&quot;;
}
@Html.Raw(htmlContent)</pre>
'''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 156: Zeile 157:


=== 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">
<syntaxhighlight lang="csharp">// Controller
// Controller
ViewData["Title"] = "Startseite";
ViewData["Title"] = "Startseite";


// View
// View
<h1>@ViewData["Title"]</h1></syntaxhighlight>
<h1>@ViewData["Title"]</h1>
</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">
<syntaxhighlight lang="csharp">// Controller
// Controller
ViewBag.Title = "Startseite";
ViewBag.Title = "Startseite";


// View
// View
<h1>@ViewBag.Title</h1></syntaxhighlight>
<h1>@ViewBag.Title</h1>
</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 188: Zeile 190:


'''Syntax''':
'''Syntax''':
# Definieren Sie den Modelltyp oben in der View:
# Definieren Sie den Modelltyp oben in der View:
 
<syntaxhighlight lang="razor">
<pre class="razor">@model MyProject.Models.Person</pre>
@model MyProject.Models.Person
</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">
<syntaxhighlight lang="csharp">public IActionResult Details()
public IActionResult Details()
{
{
     var person = new Person { Name = "John" };
     var person = new Person { Name = "John" };
     return View(person);
     return View(person);
}</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.
</syntaxhighlight>


<syntaxhighlight lang="csharp">public class PersonProductViewModel
'''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.
<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 217: Zeile 225:


'''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 223: Zeile 230:


'''Beispielinhalt''':
'''Beispielinhalt''':
<syntaxhighlight lang="razor">
@using MyProject
@using MyProject.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
</syntaxhighlight>


<pre class="razor">@using MyProject
@using MyProject.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers</pre>
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 239: Zeile 247:


'''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''': Wenn ein Controller <code>View(&quot;MyView&quot;)</code> zurückgibt, sucht ASP.NET Core in:
'''Erkennung''':
 
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''

Aktuelle 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).