2013-05-01 15 views
5

Ich muss Daten in Form einer Liste für zwei verschiedene Modelle in meiner Datenbank an eine Ansicht in einem MVC4-Projekt senden.MVC4 ViewBag oder ViewModel oder?

Etwas wie folgt aus:

-Controller:

public ActionResult Index() 
{ 
    Entities db = new Entities(); 

    ViewData["Cats"] = db.Cats.toList(); 
    ViewData["Dogs"] = db.Dogs.toList(); 

    return View(); 
} 

Ansicht:

@* LIST ONE *@ 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColOne) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColTwo) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListOneColThree) 
     </th> 
    </tr> 

@foreach (var item in @ViewData["Cats"]) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColOne) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColTwo) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListOneColThree) 
     </td> 
    </tr> 


@* LIST TWO *@ 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColOne) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColTwo) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.ListTwoColThree) 
     </th> 
    </tr> 

@foreach (var item in @ViewData["Dogs"]) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColOne) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColTwo) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.ListTwoColThree) 
     </td> 
    </tr> 

Die Ansicht ist zwei der Liste angezeigt werden, eine Liste pro Modell.

Ich bin unsicher, was der effizienteste Weg ist, dies zu tun?

Viewmodel?

Viewdata/Viewbag?

Etwas anderes? die Antwort zu implementieren was auf eine List<T> Ansichtsmodell ohne Erfolg

Weitere denn ich habe jetzt mehr als eine Stunde versucht:

(Bitte keine Drittanbieter-Vorschläge)

UPDATE. Ich glaube, dass dies auf die Tatsache zurückzuführen ist, dass mein Ansichtsmodell wie folgt aussieht:

public class GalleryViewModel 
{ 
    public Cat cat { get; set; } 
    public Dog dog { get; set; } 
} 

Antwort

7

versuchen, Ihr Problem und Ihr Ziel zu erklären, damit wir wissen, (speziell), was Sie zu tun versuchen.

Ich nehme an, dass Sie zwei Listen haben und Sie möchten sie an eine Ansicht senden. Eine Möglichkeit besteht darin, zwei Listen in ein Modell zu schreiben und das Modell an die Ansicht zu senden, aber Sie haben anscheinend angegeben, dass Sie bereits zwei Modelle haben, also gehe ich von dieser Annahme aus.

-Controller

public ActionResult Index() 
{ 
    ModelA myModelA = new ModelA(); 
    ModelB myModelB = new ModelB(); 

    IndexViewModel viewModel = new IndexViewModel(); 

    viewModel.myModelA = myModelA; 
    viewModel.myModelB = myModelB; 

    return View(viewModel); 
} 

Ansicht Modell

public class IndexViewModel 
{ 
    public ModelA myModelA { get; set; } 
    public ModelB myModelB { get; set; } 
} 

Modell

public class ModelA 
{ 
    public List<String> ListA { get; set; } 
} 

public class ModelB 
{ 
    public List<String> ListB { get; set; } 
} 

Ansicht

@model IndexViewModel 

@foreach (String item in model.myModelA) 
{ 
    @item.ToString() 
} 

(Sorry, wenn mein C# ist rostig)

+0

Dank @row ich das zu bekommen habe versucht zu arbeiten, aber ich kann es nicht herausgefunden scheinen. Offensichtlich besteht das Problem darin, dass mein ViewModel nicht aus "List " besteht, sondern aus dem tatsächlichen Modelltyp, z. B. 'public ListA listA {get; einstellen; } '. Ich werde meinen ursprünglichen Beitrag aktualisieren, um dies zu reflektieren. –

+0

dauerte eine Weile, aber ich habe es! Danke Rowan. –

Verwandte Themen