Ich habe derzeit den folgenden Code im HomeController meines MVC-Projekts:
%Vor%Das funktioniert also gut, aber jetzt möchte ich eine zweite Tabelle zur selben Ansicht weiterleiten. Also dachte ich mir, ich könnte so etwas machen:
%Vor%Gibt es eine Möglichkeit, die Ansicht zwei Modelle wie diese akzeptieren zu lassen, oder eine Möglichkeit, die beiden Ergebnismengen zusammenzuführen (die beiden Tabellen sind in keiner Weise miteinander verknüpft?
) Ja, es gibt, aber nicht so. Sie können das tun, was Sie tun möchten, indem Sie eine benutzerdefinierte ViewModel-Klasse erstellen. Diese Klasse ( MyPageViewModel ) würde zwei (oder mehr) Eigenschaften haben, eine für jedes Ihrer Objekte. Aus Ihrer Sicht würden Sie mit Model.Table1Data
und Model.Table2Data
darauf zugreifen.
Eine benutzerdefinierte ViewModel-Klasse ist sehr einfach:
%Vor%Ihre Ansicht müsste für diese benutzerdefinierte ViewModel-Klasse stark typisiert werden .
%Vor%Versuche nicht, das selbst zu tippen; Es ist einfacher, eine neue Ansicht zu erstellen und die "stark typisierte" Ansicht zu überprüfen und Ihre neue benutzerdefinierte Ansichtsmodellklasse anzugeben.
Dann wäre Ihre Aktion-Controller-Methode :
%Vor%Ja - Erstellen Sie eine neue Klasse, die Sie als Modell verwenden, die beide Tabellen enthält:
%Vor%Initiieren Sie dann in Ihrem Controller diese Klasse und füllen Sie beide Eigenschaften und senden Sie sie an Ihre Ansicht. Ändern Sie dann die Ansicht, um diesen neuen Typ als Ansichtsmodell zu erkennen.
Ich habe das Problem gelöst, indem ich eine Liste von 'Tabellen' erstellt und diese an mein Ansichtsmodell übergeben habe. Dies ist im Wesentlichen eine Liste einer Liste von TransactionEntities. Zu Ihrer Information, meine Lösung hieß DAL, und in den Modellen habe ich eine TransactionEntity erstellt, um eine Transaktion darzustellen.
%Vor% Ich befülle die Transaktions-Entity-Listen (tel1, tel2, tel3) mit meinen te 'rows', füge dann die drei 'tel'-Objekte (im Wesentlichen wie eine Tabelle) zu meiner telCollection hinzu und weise sie meinem ViewData.Model. In der ASPX-Datei erhalte ich dann die Liste und iteriere durch jede 'Tabelle' (ElementAt (#)) und erstelle drei verschiedene Spalten, eine für jede der tal '-Tabellen'. BTW, Sie können die Zählervariable ignorieren.
Sie könnten beide zu einem ViewModel machen:
Modelldefinition:
%Vor%Verwendung (im Controller):
%Vor%In pre-MVC3 hätte ich ein ViewModel verwendet und Eigenschaften für jedes Objekt hinzugefügt, das die Ansicht verwenden soll. Wenn Sie MVC3 verwenden, würde ich einen Blick auf ViewBag .
Ein einfaches Ansichtsmodell:
%Vor%Dann würden Sie dies in Ihrem Controller an Ihre Ansicht weitergeben:
%Vor%Sie werden wahrscheinlich ViewModel verwenden müssen. Sie definieren eine Klasse, die Instanzen der beiden gewünschten Klassen (+ weitere beliebige zusätzliche Eigenschaften) enthält, und Sie verwenden diese dann als Modell.
%Vor%Dann bereiten Sie einfach die Sammlung dieser ViewModel-Klassen vor und greifen später auf Instanzen wie:
zu %Vor%usw. Füge einfach alle benötigten Entitäten in einer Klasse zusammen und verwende diese Klasse als Modell in Controller und Ansicht.
Tags und Links asp.net-mvc c# linq asp.net-mvc-viewmodel