2011-07-08 42 views
11

Supongamos que tiene una lista de personas A y una lista de personas B en una página. Y estos dos son clases separadas en L2S, que representan dos tablas diferentes. Por lo tanto, no puede pasar un solo modelo de la siguiente manera:C# mvc model vs viewbag

... 
@model PeopleA 
... 
@foreach(var peopleA in Model.People) ... 

@foreach(var peopleB in //what?) 

En consecuencia, supongo, tengo tres opciones a seguir.

  • El primero es dividir la página en vistas parciales para poder pasar un modelo a través del asistente RenderAction. Como usaré estas vistas parciales solo una vez, esta opción no me parece atractiva.
  • La segunda opción sería usar ViewBags que no quiero, ya que prefiero los modelos fuertemente tipados.
  • La última, por último, que estaba a punto de usar, pero quería preguntar antes de hacerlo, es la creación de un modelo como el siguiente:

ModelMyPage.cs

public List<PeopleA> peopleA { get; set; } 
public List<PeopleB> peopleB { get; set; } 

myController. cs

... 
ModelMyPage m = new ModelMyPage(); 
m.peopleA = // query 
m.peopleB = // another query 
return(m); 

Y usted tiene la idea. ¿Es esta la manera válida de llevar a cabo mi tarea o hay una mejor manera C# para hacer lo que quiero?

Respuesta

17

Creando un ViewModel específico para la página, ya que su opción 3 es la forma en que lo haría.

Creo que este es también el enfoque recomendado.

2

Lo haría de la tercera manera. Además, si usted va a representar HTML idéntico para cada persona en ambas matrices, me concat antes foreach:

var person in Model.PeopleA.Concat(Model.PeopleB) 
2

Sus primeras y terceras opciones parecen tanto en Aceptar.

ad 1) "usarlos solo una vez" no es un buen argumento en contra. Use Vistas parciales para organizar vistas.

ad 2) Use la Viewbag para agregar elementos pequeños como una lista de búsqueda.

ad 3) ViewModels se están volviendo comunes en MVC. Este es probablemente el mejor enfoque.

8

No, no hay una mejor idea. En asp.net MVC, M significa ViewModels, no Business, modelos de dominio. Se recomienda crear ViewModels para sus vistas y no se recomienda utilizar Business Models. Debe diseñar sus ViewModels para adaptarse a la necesidad de las interacciones del controlador con el dominio y del controlador para ver las interacciones

2

Normalmente creo un modelo para la página y lo nombro como tal, por ejemplo, AccountDetailsPageModel. Entonces otros modelos pueden ser propiedades de esto para páginas complejas.