2013-06-10 15 views
10

Jestem nowy do mvc i próbuję go nauczyć, robiąc z nim mały projekt. Mam stronę, która ma wyświetlać waluty i pogodę konkretnej daty. więc powinienem przekazać model walutowy i model pogodowy. Zrobiłem, aby przejść model walut i działa dobrze, ale nie wiem, jak przekazać drugi model. Większość tutoriali pokazuje, jak przekazać tylko jeden model.Przekaż dwa modele, aby wyświetlić

możesz dać pomysł, jak to zrobić.

to mój obecny działanie kontroler, który wysyła modelowi walucie

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

Po prostu utwórz zagregowaną klasę modelu z 2 modelami, które musisz przekazać jako właściwości. –

+0

Nie zrozumiałam –

Odpowiedz

31

Można utworzyć specjalną ViewModel, który zawiera zarówno modele:

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

i przekazać go wyświetlić.

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

Jak uzyskać dostęp do różnych modeli z widoku po pomyślnym wykonaniu? – Mwas

+1

model.Currencies, aby uzyskać właściwości z walut i model.CurrentWeather iść uzyskać właściwości z CurrentWeather –

3

Brzmi jak można użyć modelu, który jest specyficzny dla tego widoku.

public class MyViewModel{ 

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

} 

a następnie od kontrolera można przekazać tego nowego widoku modelu w widoku zamiast:

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() }); 
    } 

można nie tylko dodać więcej właściwości do widoku modelu, które zawierają jakiekolwiek inne modele (model pogody) i odpowiednio je ustawić.

+0

Możesz użyć ViewBag lub Tempdata. – caras

5

Trzeba utworzyć nowy model, który musi zawierać całe obiekty, które chcesz przekazać go wyświetlić. Powinieneś utworzyć model (klasę, obiekt), który dziedziczy model podstawowy (klasa, obiekt).

I inne sugestie możesz wysyłać obiekty (modele) poprzez Widok ["model1"] i Widok ["model2"] lub po prostu tablicę, która zawiera obiekty do przekazania i rzucić je w widoku, który nie radzę .

+0

jak wysłać je z widokiem? jak przekazać go od kontrolera do widoku –

+0

W klasie kontrolera 'ViewData [" CurrentTime "] = DateTime.Now.ToString();' i w widoku strony '

<%: ViewData["CurrentTime"] %>
' po więcej szczegółów ten link może pomóc [link] (http: //www.dotnetfunda.com/articles/article1310-how-to-pass-data-from-controllers-to-views-in-aspnet-mvc-tutorial-no-2.aspx) – nesimtunc

Powiązane problemy