2013-06-10 11 views
10

Sono nuovo di mvc e provo a impararlo facendo un piccolo progetto con esso. Ho una pagina che dovrebbe mostrare le valute e il tempo della data specifica. quindi dovrei passare il modello di valute e il modello meteorologico. Ho fatto passare il modello di valute e funziona bene, ma non so come passare il secondo modello. E la maggior parte delle esercitazioni mostra come passare un solo modello.passare due modelli per visualizzare

puoi dare un'idea di come farlo.

questo è il mio attuale azione di controllo che invia modello moneta

public ActionResult Index(int year,int month,int day) 
    { 
     var model = from r in _db.Currencies 
        where r.date == new DateTime(year,month,day) 
        select r; 

     return View(model); 
    } 
+0

È sufficiente creare una classe modello aggregata con 2 modelli che è necessario passare come proprietà. –

+0

Non capisco –

risposta

31

È possibile creare speciale ViewModel che contiene entrambi i modelli:

public class CurrencyAndWeatherViewModel 
{ 
    public IEnumerable<Currency> Currencies{get;set;} 
    public Weather CurrentWeather {get;set;} 
} 

e passarlo a vedere.

public ActionResult Index(int year,int month,int day) 
{ 
    var currencies = from r in _db.Currencies 
       where r.date == new DateTime(year,month,day) 
       select r; 
    var weather = ... 

    var model = new CurrencyAndWeatherViewModel {Currencies = currencies.ToArray(), CurrentWeather = weather}; 

    return View(model); 
} 
+0

Come posso accedere ai diversi modelli dalla vista dopo averli passati con successo? – Mwas

+1

model.Currencies per ottenere proprietà da Currencies e model.CurrentWeather ottenere proprietà da CurrentWeather –

3

Sembra che si potrebbe usare un modello che è specifico per questo punto di vista.

public class MyViewModel{ 

    public List<Currencies> CurrencyList {get;set;} 

} 

e poi da controller si poteva passare questa nuova visione del modello nella vista, invece:

public ActionResult Index(int year,int month,int day) 
    { 
     var model = from r in _db.Currencies 
        where r.date == new DateTime(year,month,day) 
        select r; 

     return View(new MyViewModel { CurrencyList = model.ToList() }); 
    } 

È possibile che solo aggiungere più proprietà per il vostro modello di visualizzazione che contengono tutti gli altri modelli (modello Weather) e impostarli in modo appropriato.

+0

È possibile utilizzare ViewBag o Tempdata. – caras

5

È necessario creare un nuovo modello che deve contenere l'intero oggetto che si desidera passare per visualizzare. Dovresti creare un modello (classe, oggetto) che erediti il ​​modello di base (classe, oggetto).

E altri suggerimenti è possibile inviare oggetti (modelli) tramite Visualizza ["modello1"] e Visualizza ["modello2"] o solo un array che contiene oggetti per passarlo e gettarli all'interno della vista che non consiglio .

+0

come inviarli con View? come si passa dal controller per visualizzare –

+0

Nella classe controller 'ViewData [" CurrentTime "] = DateTime.Now.ToString();' e nella pagina di visualizzazione '

<%: ViewData["CurrentTime"] %>
' per ulteriori dettagli questo collegamento potrebbe essere d'aiuto [collegamento] (http: //www.dotnetfunda.com/articles/article1310-how-to-pass-data-from-controllers-to-views-in-aspnet-mvc-tutorial-no-2.aspx) – nesimtunc

Problemi correlati