This article has been localized into German by the community.
Vorlagen Delegierung
Mit der Funktion "Delegieren mit Vorlagen" in Razor können Sie ein Stück Markup definieren und es dann zur Darstellung eines bestimmten Objekts auf der Seite verwenden. Dies ist ein großartiges Werkzeug, wenn Sie z.B.: eine Ihrer Klassen an mehreren Stellen in Ihrer Ansicht präsentieren möchten. Es kann auch eine großartige Möglichkeit sein, einen großen Teil des Markups von der Logik Ihrer Ansicht zu trennen, um das Lesen und Verwalten großer Ansichten zu vereinfachen.
Wenn Sie einen Delegaten mit Vorlagen definieren, verwenden Sie einen Func-Delegaten. Dies könnte folgendermaßen aussehen:
Func<dynamic, object> movieTemplate = @<div>@item.Title [@item.ReleaseDate.ToShortDateString()]</div>;
In dieser ersten Hälfte erstelle ich vor dem Gleichheitszeichen den movieTemplate-Delegaten. Im zweiten Teil lege ich die zu verwendende Markup-Vorlage fest. Beachten Sie, dass ich eine Variable mit dem Namen item verwende. Sie wird an den Delegaten übergeben und der Typ ist dynamisch. Dies bedeutet, dass ich auf Mitglieder (z.B.: Title) zugreifen kann, die zur Kompilierungszeit nicht überprüft werden. Stattdessen werden sie zur Laufzeit überprüft, wo erwartet wird, dass sie für das an den Delegaten übergebene Objekt vorhanden sind. Andernfalls wird eine Ausnahme ausgelöst! Beim Übergeben von Objekten des Typs Film, eine einfache Klasse, die wir zuvor in diesem Tutorial verwendet haben:
public class Movie
{
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
}
Wenn also unsere Delegate Vorlage vorhanden ist, können wir sie jetzt verwenden, z.B.: in einer Schleife. Beachten Sie, wie ich jetzt einfach den Delegaten aufrufen und das Movie-Objekt übergeben kann, anstatt das Markup in der Schleife zu definieren:
@foreach(var movie in movies)
{
@movieTemplate(movie)
}
Wenn Sie die in der Schleife verwendete Sammlung movies mit einigen Testdaten füllen, sieht die generierte Ausgabe folgendermaßen aus:
<div>The Godfather [24-03-1972]</div>
<div>Forrest Gump [06-07-1994]</div>
<div>Fight Club [15-10-1999]</div>
Und hier ist ein vollständiges Beispiel mit Testdaten zu Filmen, mit denen Sie experimentieren können:
@using HelloMVCWorld.Models
@{
ViewData["Title"] = "TemplatedDelegate";
Func<dynamic, object> movieTemplate = @<div>@item.Title [@item.ReleaseDate.ToShortDateString()]</div>;
List<Movie> movies = new List<Movie>();
movies.Add(new Movie() { Title = "The Godfather", ReleaseDate = new DateTime(1972, 3, 24) });
movies.Add(new Movie() { Title = "Forrest Gump", ReleaseDate = new DateTime(1994, 7, 6) });
movies.Add(new Movie() { Title = "Fight Club", ReleaseDate = new DateTime(1999, 10, 15) });
}
@foreach(var movie in movies)
{
@movieTemplate(movie)
}
Zusammenfassung
Mit der in Razor enthaltenen Syntax von Delegates mit Vorlagen können Sie auf einfache Weise markupbasierte Vorlagen definieren, die an mehreren Stellen in Ihren Ansichten wiederverwendet werden können.