2013-05-01 15 views
5

Ho bisogno di inviare dati sotto forma di elenco per due diversi modelli nel mio database a una vista in un progetto MVC4.MVC4 ViewBag o ViewModel o?

Qualcosa di simile a questo:

controller:

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

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

    return View(); 
} 

Vista:

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

La vista è quello di visualizzare, una lista di due lista per modello.

Non sono sicuro di quale sia il modo più efficiente per farlo?

Viewmodel?

Viewdata/Viewbag?

Qualcos'altro?

(suggerimenti Si prega di non di terze parti)

UPDATE:

Inoltre ho tentato per più di un'ora oggi per implementare la risposta suggerendo un List<T> ViewModel senza alcuna fortuna. Credo che questo sia dovuto al fatto che il mio ViewModel assomiglia a questo:

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

risposta

7

Cercare di spiegare il problema e il vostro obiettivo, quindi sappiamo (in particolare) quello che stai cercando di fare.

Prendo questo per indicare che si dispone di due elenchi e che si desidera inviarli a una vista. Un modo per farlo è inserire due liste in un modello e inviare il modello alla vista, ma sembra che tu abbia specificato che hai già due modelli, quindi andrò con questa ipotesi.

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

View Modello

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

Modello

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

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

View

@model IndexViewModel 

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

(Scusate se la mia C# è arrugginito)

+0

Grazie @row ho cercato di ottenere questo lavoro, ma io non riesco a capirlo. Apparentemente il problema è che il mio ViewModel non è composto da 'Lista ' piuttosto il tipo di modello effettivo ad es., 'Lista pubblicaA listaA {get; impostato; } '. Ho intenzione di aggiornare il mio post iniziale per riflettere questo. –

+0

Ci ho messo un po 'ma l'ho capito! Grazie Rowan. –

Problemi correlati