2012-07-14 3 views
7

Ho un controller che crea un modello e chiama una vista passando il modello come parametro. Nella vista è presente una direttiva @model che specifica il tipo di modello. Voglio riutilizzare la stessa vista, ma passare un modello diverso dal controller. È possibile modificare in modo dinamico (o condizionato) la direttiva @model nella vista?come cambiare la direttiva @model in un modello diverso nella visualizzazione a rasoio?

Per esempio, nella mia azione di controllo:

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

allora come posso definire @model in una direttiva nell'ottica di soddisfare entrambi i modelli? Voglio la stessa vista per rendere le informazioni basate sul tipo di modello passato.

Grazie.


UPDATE:

Grazie, ma ho bisogno di utilizzare una comune vista solo con i diversi modelli.

È possibile, ecco come si può fare.

in una vista definisco:

@model IEnumerable<MvcApplication1.Models.IBaseInterface> 

nella classe del modello che definiscono:

public interface IBaseInterface { } 

public class Contact: IBaseInterface {} 

public class Company: IBaseInterface {} 

Poi, in una vista che uso:

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

funziona perfettamente :)

risposta

4

È possibile modificare in modo dinamico (o condizionale) la direttiva @model nella vista?

No.

Se è necessario passare diversi modelli Questo significa che è necessario diversi punti di vista:

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

Una regola fondamentale in ASP.NET MVC è la seguente: a view model per view.

0

La soluzione semplice e piacevole sarebbe utilizzare il modello di visualizzazione e legare la vista a quel modello di vista e dalle azioni del controllore è possibile convertire i modelli in modello di vista e passarlo alla vista.

Se sei un appassionato di dinamiche e le proprietà dei due modelli sono le stesse l'altra opzione è che puoi legare la vista al modello dynamic.