Webframeworkk/ASP.NET Core/Partial Views: Unterschied zwischen den Versionen
imported>Import Version 187 |
Die Seite wurde neu angelegt: „== Einführung == In ASP.NET Core MVC ist eine '''Partial View''' (Teilansicht) ein wiederverwendbarer Block von Razor-Markup (.cshtml), der in andere Views eingebettet werden kann. Sie sind dafür konzipiert, spezifische UI-Elemente wie Listen, Formulare, Navigationsleisten oder Widgets zu kapseln. === Warum Partial Views verwenden? === * '''Wiederverwendbarkeit:''' Code einmal schreiben und in mehreren Views verwenden, was Duplikate und Inkonsistenzen…“ |
||
| Zeile 3: | Zeile 3: | ||
== Einführung == | == Einführung == | ||
In ASP.NET Core MVC ist eine '''Partial View''' (Teilansicht) ein wiederverwendbarer Block von Razor-Markup (.cshtml), der in andere Views eingebettet werden kann. Sie sind dafür konzipiert, spezifische UI-Elemente wie Listen, Formulare, Navigationsleisten oder Widgets zu kapseln. | In ASP.NET Core MVC ist eine '''Partial View''' (Teilansicht) ein wiederverwendbarer Block von Razor-Markup (.cshtml), der in andere Views eingebettet werden kann. Sie sind dafür konzipiert, spezifische UI-Elemente wie Listen, Formulare, Navigationsleisten oder Widgets zu kapseln. | ||
=== Warum Partial Views verwenden? === | === Warum Partial Views verwenden? === | ||
* '''Wiederverwendbarkeit:''' Code einmal schreiben und in mehreren Views verwenden, was Duplikate und Inkonsistenzen reduziert. | * '''Wiederverwendbarkeit:''' Code einmal schreiben und in mehreren Views verwenden, was Duplikate und Inkonsistenzen reduziert. | ||
* '''Modularität:''' Komplexe Views in kleinere, überschaubare Komponenten aufteilen, wodurch der Code leichter zu lesen und zu warten ist. | * '''Modularität:''' Komplexe Views in kleinere, überschaubare Komponenten aufteilen, wodurch der Code leichter zu lesen und zu warten ist. | ||
* '''Dynamischer Inhalt:''' Daten an Partial Views übergeben, um sie an verschiedene Kontexte anzupassen. | * '''Dynamischer Inhalt:''' Daten an Partial Views übergeben, um sie an verschiedene Kontexte anzupassen. | ||
---- | |||
== Grundlagen von Partial Views == | == Grundlagen von Partial Views == | ||
=== Namenskonvention === | === Namenskonvention === | ||
Partial Views werden typischerweise mit einem führenden Unterstrich benannt (z. B. _ListPartialView.cshtml). Dies hilft, sie von vollständigen Views zu unterscheiden. | Partial Views werden typischerweise mit einem führenden Unterstrich benannt (z. B. _ListPartialView.cshtml). Dies hilft, sie von vollständigen Views zu unterscheiden. | ||
=== Speicherort === | === Speicherort === | ||
Standardmäßig sucht ASP.NET Core nach Partial Views in: | Standardmäßig sucht ASP.NET Core nach Partial Views in: | ||
# Dem gleichen Ordner wie die View, die sie rendert. | # Dem gleichen Ordner wie die View, die sie rendert. | ||
# Dem Ordner Views/Shared. | # Dem Ordner Views/Shared. | ||
| Zeile 30: | Zeile 24: | ||
Sie können bei Bedarf auch den vollständigen Pfad angeben. | Sie können bei Bedarf auch den vollständigen Pfad angeben. | ||
---- | |||
== Rendern von Partial Views == | == Rendern von Partial Views == | ||
Sie können Partial Views in Ihren Haupt-Views mithilfe von Tag Helpers oder HTML Helpers rendern. | Sie können Partial Views in Ihren Haupt-Views mithilfe von Tag Helpers oder HTML Helpers rendern. | ||
=== 1. Tag Helpers (Empfohlen) === | === 1. Tag Helpers (Empfohlen) === | ||
Der <partial> Tag Helper ist sauberer und leichter zu lesen. | Der <partial> Tag Helper ist sauberer und leichter zu lesen. | ||
<source lang="html"> | |||
< | <!-- Einfaches Rendern --> | ||
<partial name="_ListPartialView" /> | <partial name="_ListPartialView" /> | ||
| Zeile 48: | Zeile 39: | ||
<!-- Mit ViewData --> | <!-- Mit ViewData --> | ||
<partial name="_ListPartialView" view-data="yourViewData" /></ | <partial name="_ListPartialView" view-data="yourViewData" /> | ||
</source> | |||
=== 2. HTML Helpers === | === 2. HTML Helpers === | ||
Die Methoden Html.PartialAsync oder Html.RenderPartialAsync können ebenfalls verwendet werden. | Die Methoden Html.PartialAsync oder Html.RenderPartialAsync können ebenfalls verwendet werden. | ||
<source lang="csharp"> | |||
< | <!-- Gibt IHtmlContent zurück --> | ||
@await Html.PartialAsync("_ListPartialView") | @await Html.PartialAsync("_ListPartialView") | ||
@await Html.PartialAsync("_ListPartialView", yourModel) | @await Html.PartialAsync("_ListPartialView", yourModel) | ||
<!-- Rendert direkt in den Antwort-Stream (void Rückgabe) --> | <!-- Rendert direkt in den Antwort-Stream (void Rückgabe) --> | ||
@{ await Html.RenderPartialAsync("_ListPartialView"); }</ | @{ await Html.RenderPartialAsync("_ListPartialView"); } | ||
</source> | |||
''Hinweis: RenderPartialAsync ist im Allgemeinen schneller, da es direkt in den Antwort-Stream schreibt.'' | ''Hinweis: RenderPartialAsync ist im Allgemeinen schneller, da es direkt in den Antwort-Stream schreibt.'' | ||
---- | |||
== Datenübertragung: ViewBag vs. Streng Typisiert == | |||
== Datenübertragung: ViewBag vs. | |||
=== Option 1: Verwendung von ViewBag (Nicht empfohlen für komplexe Daten) === | === Option 1: Verwendung von ViewBag (Nicht empfohlen für komplexe Daten) === | ||
Sie können ViewBag oder ViewData verwenden, um Daten zu übergeben, aber es fehlt die Typsicherheit. | Sie können ViewBag oder ViewData verwenden, um Daten zu übergeben, aber es fehlt die Typsicherheit. | ||
'''Partial View (_ListPartialView.cshtml):''' | '''Partial View (_ListPartialView.cshtml):''' | ||
<source lang="html"> | |||
< | <div class="list-container"> | ||
<h3>@ViewBag.ListTitle</h3> | <h3>@ViewBag.ListTitle</h3> | ||
<ul class="list"> | <ul class="list"> | ||
| Zeile 80: | Zeile 71: | ||
} | } | ||
</ul> | </ul> | ||
</div></ | </div> | ||
</source> | |||
'''Haupt-View (Index.cshtml):''' | '''Haupt-View (Index.cshtml):''' | ||
<source lang="html"> | |||
< | @{ | ||
// Daten über ein neues ViewDataDictionary übergeben, um das Haupt-ViewData nicht zu verunreinigen | // Daten über ein neues ViewDataDictionary übergeben, um das Haupt-ViewData nicht zu verunreinigen | ||
var myViewData = new ViewDataDictionary(ViewData); | var myViewData = new ViewDataDictionary(ViewData); | ||
| Zeile 90: | Zeile 83: | ||
} | } | ||
<partial name="_ListPartialView" view-data="myViewData" /></ | <partial name="_ListPartialView" view-data="myViewData" /> | ||
</source> | |||
=== Option 2: Streng typisierte Partial Views (Empfohlen) === | === Option 2: Streng typisierte Partial Views (Empfohlen) === | ||
Die Verknüpfung einer Partial View mit einer Modellklasse bietet Typsicherheit zur Kompilierzeit und IntelliSense. | Die Verknüpfung einer Partial View mit einer Modellklasse bietet Typsicherheit zur Kompilierzeit und IntelliSense. | ||
'''Das Modell (ListModel.cs):''' | '''Das Modell (ListModel.cs):''' | ||
<source lang="csharp"> | |||
< | namespace PartialViewsExample.Models | ||
{ | { | ||
public class ListModel | public class ListModel | ||
| Zeile 104: | Zeile 98: | ||
public List<string> ListItems { get; set; } = new List<string>(); | public List<string> ListItems { get; set; } = new List<string>(); | ||
} | } | ||
}</ | } | ||
</source> | |||
'''Streng typisierte Partial View (_ListPartialView.cshtml):''' | '''Streng typisierte Partial View (_ListPartialView.cshtml):''' | ||
<source lang="html"> | |||
< | @model ListModel | ||
<div class="list-container"> | <div class="list-container"> | ||
| Zeile 117: | Zeile 113: | ||
} | } | ||
</ul> | </ul> | ||
</div></ | </div> | ||
</source> | |||
'''Haupt-View (Index.cshtml):''' | '''Haupt-View (Index.cshtml):''' | ||
<source lang="html"> | |||
< | @using PartialViewsExample.Models | ||
@{ | @{ | ||
| Zeile 129: | Zeile 127: | ||
<!-- Das Modell an die Partial View übergeben --> | <!-- Das Modell an die Partial View übergeben --> | ||
<partial name="_ListPartialView" model="listModel" /> </ | <partial name="_ListPartialView" model="listModel" /> | ||
</source> | |||
---- | |||
== Rückgabe von Partial Views aus Controllern (PartialViewResult) == | == Rückgabe von Partial Views aus Controllern (PartialViewResult) == | ||
| Zeile 138: | Zeile 137: | ||
=== Controller Action === | === Controller Action === | ||
<source lang="csharp"> | |||
< | [Route("programming-languages")] | ||
public IActionResult GetLanguages() | public IActionResult GetLanguages() | ||
{ | { | ||
| Zeile 149: | Zeile 148: | ||
// Gibt nur das HTML der Partial View zurück | // Gibt nur das HTML der Partial View zurück | ||
return PartialView("_ListPartialView", listModel); | return PartialView("_ListPartialView", listModel); | ||
}</ | } | ||
</source> | |||
=== Client-seitiges Beispiel (AJAX) === | === Client-seitiges Beispiel (AJAX) === | ||
<source lang="html"> | |||
< | <button id="load-btn">Sprachen laden</button> | ||
<div id="content-area"></div> | <div id="content-area"></div> | ||
| Zeile 164: | Zeile 165: | ||
document.querySelector("#content-area").innerHTML = html; | document.querySelector("#content-area").innerHTML = html; | ||
}); | }); | ||
</script></ | </script> | ||
</source> | |||
---- | |||
== Wichtige Punkte == | == Wichtige Punkte == | ||
# '''Kapselung:''' Verwenden Sie Partial Views, um Code zu organisieren und das DRY-Prinzip (Don't Repeat Yourself) einzuhalten. | |||
# '''Kapselung:''' Verwenden Sie Partial Views, um Code zu organisieren und das DRY-Prinzip ( | |||
# '''Typsicherheit:''' Bevorzugen Sie '''streng typisierte''' Partial Views (@model) gegenüber ViewData/ViewBag für bessere Wartbarkeit und Fehlerprüfung. | # '''Typsicherheit:''' Bevorzugen Sie '''streng typisierte''' Partial Views (@model) gegenüber ViewData/ViewBag für bessere Wartbarkeit und Fehlerprüfung. | ||
# '''Benennung:''' Stellen Sie Partial View-Dateinamen einen Unterstrich voran (z. B. _Header.cshtml). | # '''Benennung:''' Stellen Sie Partial View-Dateinamen einen Unterstrich voran (z. B. _Header.cshtml). | ||
Aktuelle Version vom 18. Februar 2026, 13:07 Uhr
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).
Einführung
In ASP.NET Core MVC ist eine Partial View (Teilansicht) ein wiederverwendbarer Block von Razor-Markup (.cshtml), der in andere Views eingebettet werden kann. Sie sind dafür konzipiert, spezifische UI-Elemente wie Listen, Formulare, Navigationsleisten oder Widgets zu kapseln.
Warum Partial Views verwenden?
- Wiederverwendbarkeit: Code einmal schreiben und in mehreren Views verwenden, was Duplikate und Inkonsistenzen reduziert.
- Modularität: Komplexe Views in kleinere, überschaubare Komponenten aufteilen, wodurch der Code leichter zu lesen und zu warten ist.
- Dynamischer Inhalt: Daten an Partial Views übergeben, um sie an verschiedene Kontexte anzupassen.
Grundlagen von Partial Views
Namenskonvention
Partial Views werden typischerweise mit einem führenden Unterstrich benannt (z. B. _ListPartialView.cshtml). Dies hilft, sie von vollständigen Views zu unterscheiden.
Speicherort
Standardmäßig sucht ASP.NET Core nach Partial Views in:
- Dem gleichen Ordner wie die View, die sie rendert.
- Dem Ordner Views/Shared.
Sie können bei Bedarf auch den vollständigen Pfad angeben.
Rendern von Partial Views
Sie können Partial Views in Ihren Haupt-Views mithilfe von Tag Helpers oder HTML Helpers rendern.
1. Tag Helpers (Empfohlen)
Der <partial> Tag Helper ist sauberer und leichter zu lesen.
<!-- Einfaches Rendern -->
<partial name="_ListPartialView" />
<!-- Mit einem Model -->
<partial name="_ListPartialView" model="yourModel" />
<!-- Mit ViewData -->
<partial name="_ListPartialView" view-data="yourViewData" />
2. HTML Helpers
Die Methoden Html.PartialAsync oder Html.RenderPartialAsync können ebenfalls verwendet werden.
<!-- Gibt IHtmlContent zurück -->
@await Html.PartialAsync("_ListPartialView")
@await Html.PartialAsync("_ListPartialView", yourModel)
<!-- Rendert direkt in den Antwort-Stream (void Rückgabe) -->
@{ await Html.RenderPartialAsync("_ListPartialView"); }
Hinweis: RenderPartialAsync ist im Allgemeinen schneller, da es direkt in den Antwort-Stream schreibt.
Datenübertragung: ViewBag vs. Streng Typisiert
Option 1: Verwendung von ViewBag (Nicht empfohlen für komplexe Daten)
Sie können ViewBag oder ViewData verwenden, um Daten zu übergeben, aber es fehlt die Typsicherheit.
Partial View (_ListPartialView.cshtml):
<div class="list-container">
<h3>@ViewBag.ListTitle</h3>
<ul class="list">
@foreach (string item in ViewBag.ListItems)
{
<li>@item</li>
}
</ul>
</div>
Haupt-View (Index.cshtml):
@{
// Daten über ein neues ViewDataDictionary übergeben, um das Haupt-ViewData nicht zu verunreinigen
var myViewData = new ViewDataDictionary(ViewData);
myViewData["ListTitle"] = "Länder";
myViewData["ListItems"] = new List<string>() { "USA", "Deutschland", "Japan" };
}
<partial name="_ListPartialView" view-data="myViewData" />
Option 2: Streng typisierte Partial Views (Empfohlen)
Die Verknüpfung einer Partial View mit einer Modellklasse bietet Typsicherheit zur Kompilierzeit und IntelliSense.
Das Modell (ListModel.cs):
namespace PartialViewsExample.Models
{
public class ListModel
{
public string ListTitle { get; set; } = "";
public List<string> ListItems { get; set; } = new List<string>();
}
}
Streng typisierte Partial View (_ListPartialView.cshtml):
@model ListModel
<div class="list-container">
<h3>@Model.ListTitle</h3>
<ul class="list">
@foreach (string item in Model.ListItems)
{
<li>@item</li>
}
</ul>
</div>
Haupt-View (Index.cshtml):
@using PartialViewsExample.Models
@{
ListModel listModel = new ListModel();
listModel.ListTitle = "Länder";
listModel.ListItems = new List<string>() { "USA", "Kanada", "Japan" };
}
<!-- Das Modell an die Partial View übergeben -->
<partial name="_ListPartialView" model="listModel" />
Rückgabe von Partial Views aus Controllern (PartialViewResult)
PartialViewResult wird verwendet, wenn Sie nur das HTML der Partial View zurückgeben möchten, oft für AJAX-Anfragen (z. B. Aktualisierung eines Teils der Seite ohne vollständiges Neuladen).
Controller Action
[Route("programming-languages")]
public IActionResult GetLanguages()
{
ListModel listModel = new ListModel() {
ListTitle = "Programmiersprachen",
ListItems = new List<string>() { "Python", "C#", "Go" }
};
// Gibt nur das HTML der Partial View zurück
return PartialView("_ListPartialView", listModel);
}
Client-seitiges Beispiel (AJAX)
<button id="load-btn">Sprachen laden</button>
<div id="content-area"></div>
<script>
document.querySelector("#load-btn").addEventListener("click", async function() {
// Das HTML der Partial View vom Controller abrufen
var response = await fetch("programming-languages");
var html = await response.text();
// Das HTML in das div einfügen
document.querySelector("#content-area").innerHTML = html;
});
</script>
Wichtige Punkte
- Kapselung: Verwenden Sie Partial Views, um Code zu organisieren und das DRY-Prinzip (Don't Repeat Yourself) einzuhalten.
- Typsicherheit: Bevorzugen Sie streng typisierte Partial Views (@model) gegenüber ViewData/ViewBag für bessere Wartbarkeit und Fehlerprüfung.
- Benennung: Stellen Sie Partial View-Dateinamen einen Unterstrich voran (z. B. _Header.cshtml).
- AJAX: Verwenden Sie PartialViewResult in Controllern, um HTML-Fragmente für dynamische Seitenaktualisierungen bereitzustellen.
Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).