MVC - Mehrere Datentabellen an eine Ansicht übergeben

7

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?

)     
pm_2 30.03.2011, 15:20
quelle

7 Antworten

16

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%     
Patrick Karcher 30.03.2011, 15:24
quelle
3

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.

    
DNR 30.03.2011 15:24
quelle
2

Warum fügen Sie dafür keine Klasse in Ihre Modelle ein?

%Vor%

Dann übergeben Sie MyModel an die Ansicht auf dem Kopf der Ansicht.

Auf dem Controller:

öffentlicher ActionResult-Index ()     {         MyDataContext dc = neues MyDataContext ();

%Vor%     
Hallaghan 30.03.2011 15:25
quelle
2

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. %Vor%

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.

%Vor%     
Jon Spencer 16.01.2012 22:18
quelle
1

Sie könnten beide zu einem ViewModel machen:

Modelldefinition:

%Vor%

Verwendung (im Controller):

%Vor%     
Rion Williams 30.03.2011 15:26
quelle
0

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%     
Andy Gaskell 30.03.2011 15:24
quelle
0

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.

    
Damb 30.03.2011 15:26
quelle