2013-05-01 14 views
5

Potrzebuję wysłać dane w formie listy dla dwóch różnych modeli w mojej bazie danych do widoku w projekcie MVC4.MVC4 ViewBag lub ViewModel lub?

coś takiego:

Controller:

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

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

    return View(); 
} 

Zobacz:

@* 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> 

Widok jest wyświetlanie dwóch list, w jednej listy za model.

Nie jestem pewien, jaki jest najskuteczniejszy sposób na zrobienie tego?

Viewmodel?

Viewdata/Viewbag?

Coś jeszcze?

(sugestie proszę nie osób trzecich)

UPDATE:

Dalsze Mam próbował ponad godzinę teraz wdrożyć odpowiedzi sugerujące List<T> ViewModel bez powodzenia. Wierzę, że jest to spowodowane faktem, że mój ViewModel wygląda następująco:

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

Odpowiedz

7

spróbować wyjaśnić swój problem i swój cel, więc wiemy (konkretnie), co próbujesz zrobić.

Rozumiem, że masz dwie listy i chcesz wysłać je do widoku. Jednym ze sposobów na to jest umieszczenie dwóch list w modelu i wysłanie modelu do widoku, ale wydaje się, że masz już określone dwa modele, więc pójdę z tym założeniem.

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); 
} 

Widok Model

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

model

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

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

Zobacz

@model IndexViewModel 

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

(Przepraszam, jeśli mój C# jest zardzewiały)

+0

Dzięki @row Próbowałam dostać się to do pracy, ale nie wydaje się rysunek. Najwyraźniej problem polega na tym, że mój ViewModel nie składa się z 'List ' raczej rzeczywistego typu modelu, np. 'Public ListA listA {get; zestaw; } '. Zamierzam zaktualizować mój pierwszy wpis, aby to odzwierciedlić. –

+0

Zajęło chwilę, ale mam to! Dziękuję Rowan. –

Powiązane problemy