2012-07-14 13 views
7

Tengo un controlador que crea un modelo y llama a una vista que pasa el modelo como parámetro. En la Vista hay una directiva @model que especifica el tipo de Modelo. Quiero reutilizar la misma Vista, pero paso un modelo diferente del controlador. ¿Es posible cambiar dinámicamente (o condicionalmente) la directiva @model en la Vista?cómo cambiar la directiva @model a un modelo diferente en la vista de afeitar?

Por ejemplo, en mi acción del controlador:

var contactsModel = db.GetContacts(); 
var companiesModel = db.GetCompanies(); 
return (someCondition)? View(contactsModel):View(companiesModel); 

Entonces, ¿cómo puedo definir @Model en una vista directiva para satisfacer tanto a los modelos? Quiero la misma vista para representar la información según el tipo de modelo aprobado.

Gracias.


ACTUALIZACIÓN:

Gracias, pero necesito utilizar una única visión común con diferentes modelos.

Es posible, así es como se podría hacer esto.

en una vista defino:

@model IEnumerable<MvcApplication1.Models.IBaseInterface> 

En la clase de modelo que defina:

public interface IBaseInterface { } 

public class Contact: IBaseInterface {} 

public class Company: IBaseInterface {} 

Luego, en una vista que utilizo:

@if (Model is List<Contact>) { 
    @foreach (var item in (List<Contact>)Model) 
     { // Here item has type Contact } 
} 

@if (Model is List<Company>) { 
    @foreach (var item in (List<Company>)Model) 
     { // Here item has type Company } 
} 

funciona perfectamente :)

Respuesta

4

¿Es posible cambiar dinámicamente (o condicionalmente) la directiva @model en la vista?

Si tiene que pasar diferentes modelos Esto significa que se necesita diferentes puntos de vista:

return (someCondition) 
    ? View("Contacts", contactsModel) 
    : View("Companies", companiesModel);\ 

Una regla fundamental en ASP.NET MVC es la siguiente: a view model per view.

0

La solución fácil y agradable sería utilizar el modelo de vista y vincular la vista a ese modelo de vista y desde las acciones del controlador puede convertir los modelos en modelos de vista y pasarlos a la vista.

Si eres fanático de la dinámica y las propiedades de los dos modelos son las mismas, la otra opción es vincular la vista al modelo dynamic.

Cuestiones relacionadas