通过两个模型来查看

时间:2013-06-10 18:26:52

标签: c# asp.net-mvc asp.net-mvc-4 model

我是mvc的新手,并尝试通过一个小项目来学习它。我有一个页面应该显示特定日期的货币和天气。所以我应该通过货币模型和天气模型。我已经完成了传递货币模型并且工作正常,但我不知道如何通过第二个模型。大多数教程都展示了如何只传递一个模型。

你能不知道怎么做。

这是我当前的控制器操作,它发送货币模型

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

3 个答案:

答案 0 :(得分:36)

您可以创建包含两个模型的特殊视图模型:

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

并将其传递给视图。

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

答案 1 :(得分:6)

您必须创建一个新模型,该模型必须包含要将其传递给视图的整个对象。您应该创建一个继承基本模型(类,对象)的模型(类,对象)。

其他建议你可以通过View [“model1”]和View [“model2”]发送对象(模型),或者只是一个包含对象的数组来传递它并将它们转换到我不建议的视图中。

答案 2 :(得分:3)

听起来您可以使用特定于此视图的模型。

public class MyViewModel{

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

}

然后从您的控制器中,您可以将此新视图模型传递到视图中:

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

您可以向视图模型添加更多属性,其中包含任何其他模型(天气模型)并进行适当设置。