2012-07-16 21 views
8

Tengo dos clases de modelo, cada una es una tabla en una base de datos. Un modelo se llama 'Ropa' y el otro 'Zapatos'.Envío de más de un modelo para ver MVC 4

Quiero mostrar los contenidos de cada tabla en la misma vista de maquinilla de afeitar, pero MVC solo me permite enviar un modelo a la vista.

@model IEnumerable<Test.Models.Clothes> 

¿Hay alguna forma de enviar más de un modelo a una maquinilla de afeitar?

De lo contrario, ¿cuál es la forma normal de mostrar los contenidos de otro modelo en una vista que ya tiene otro modelo pasado a él? Gracias por el consejo.

Respuesta

11

Haga una clase de modelo de vista que tenga como objeto la clase. Sería entonces tipo seguro.

public class ViewModelForDisplay 
{ 
     public Clothes Clothes {get; set;} 
     public Shoes Shoes {get; set;} 
} 

//on Controller 
Clothes objClothes = GetClothes(); 
Shoes objShoes = GetShoes(); 

ViewModelForDisplay objViewModel = new ViewModelForDisplay() {Clothes = objClothes, Shoes= objShoes } 

La otra forma fácil de hacerlo mediante el uso de ViewBag.It utiliza la característica dinámica que se añadió en a C# 4. Se permite que un objeto de tener dinámicamente propiedades añadidas a ella. También es Type Safe

ViewBag.Shoes= objShoes ; 
ViewBag.Clothes= objClothes ; 

También puede usar ViewData para pasar objetos a html. BUt esto no sería seguro tipo. Requiere fundición

ViewData["Clothes "] = objClothes ; 
ViewData["Shoes "] = objShoes ; 
+3

Ver Modelo es el método preferido. – RickAndMSFT

+1

Además, no es una buena idea pasar su modelo (el objeto de la base de datos) a la vista. Cree un ViewModel solo con los campos obligatorios –

+0

Gracias por reproducir y dar muestra de código, ¿hay alguna posibilidad de expandir el controlador? No funciona para mi – user1448260

1

Haga su propia clase, también conocida como Modelo de visualización, y hágalo compuesto por ambos modelos.

Cuestiones relacionadas