Ich weiß, dass das Ansichtsmodell zum Rendern einer Ansicht verwendet werden kann, aber wenn eine Seite verschiedene Modelle benötigt, wie kann ich sie an die Ansicht übergeben? Und wie kann ich sie verwenden?
Antworten
Zu viele Anzeigen?Wenn Sie mehrere Modelle übergeben müssen, erstellen Sie ein allumfassendes Modell, an dem die kleineren Modelle als Eigenschaften hängen.
Nehmen wir zum Beispiel an, Sie wollen eine Seite zur Verwaltung von Benutzergruppen für Ihre Anwendung anzeigen. Sie müssten dann wahrscheinlich eine IEnumerable<UserDisplayModel>
und auch ein IEnumerable<GroupDisplayModel>
zur Ansicht. Erstellen einer neu Anzeigemodell wie dieses:
class GroupManagementDisplayModel
{
public IEnumerable<UserDisplayModel> Users { get; set; }
public IEnumerable<GroupDisplayModel> Groups { get; set; }
}
Übergeben Sie stattdessen Instanzen dieses Modells an Ihre Ansicht.
Wenn Sie feststellen, dass Sie dies häufig tun möchten und sich nicht viel aus der Erstellung vieler kleiner Typen machen, dann können Sie die .NET 4 dynamic
Typ:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
Übergeben Sie in Ihrer Aktion einen anonymen Typ an Ihre Ansicht:
return View(new { Users, Groups });
Sie verweisen auf sie in Ihrer Ansicht, wie Sie es sonst auch tun würden.
Auf diese Weise verlieren Sie Intellisense und die starke Eingabe, aber wenn Sie Ihre Views nicht kompilieren (was eine manuelle Bearbeitung Ihrer .csproj-Datei erfordert und die Build viel langsamer), dann haben Sie sowieso keine Kompilierzeitüberprüfung für Ihre Ansichten.