ASP.NET MVC:如何将多个对象传输到View方法?

时间:2010-03-20 21:30:58

标签: asp.net asp.net-mvc object nerddinner

我完成了NerdDinner教程,现在我正在玩一些项目。 索引页面显示所有即将到来的晚餐:

    public ActionResult Index()
    {
        var dinners = dinnerRepository.FindUpComingDinners().ToList();
        return View(dinners);
    }

在DinnerRepository类中,我有方法FindAllDinners,我想在所有晚餐的索引方法编号上面添加,如下所示:

    public ActionResult Index()
    {
        var dinners = dinnerRepository.FindUpComingDinners().ToList();
        var numberOfAllDinners = dinnerRepository.FindAllDinners().Count();
        return View(dinners, numberOfAllDinners);
    }

当然,这不起作用。因为我对OOP很陌生,所以我需要帮助。

谢谢,
ILE

5 个答案:

答案 0 :(得分:10)

创建视图模型:

public class DinnerViewModel
{
    public List<Dinner> Dinners { get; set; }
    public int NumberOfAllDinners { get; set; }
}

public ActionResult Index()
{
    var dinners = dinnerRepository.FindUpComingDinners().ToList();
    var numberOfAllDinners = dinnerRepository.FindAllDinners().Count();
    return View(new DinnerViewModel { Dinners = dinners, NumberOfAllDinners = numberOfAllDinners } );
}

答案 1 :(得分:3)

您需要创建一个“包装器”对象,其中包含您希望作为公共属性传递的对象。例如,创建一个名为DinnerViewModel的对象,并为其提供两个属性,并使用两个属性设置它们,一个名为Dinners,一个名为DinnerCount。然后将DinnerViewModel传递给视图,然后您可以访问Model.DinnersModel.DinnerCount

答案 2 :(得分:1)

在你的情况下,我更喜欢LukLed提到的解决方案。

通常,您当然也可以使用 ViewData 将多个值从控制器传输到视图:

ViewData["dinners"] = dinners;
ViewData["numberOfAllDinners"] = 150;
...

有关更多信息,请查看this link

答案 3 :(得分:0)

只需简单地使用dinners.Count属性。

答案 4 :(得分:0)

请记住,您开始在.aspx文件中使用ViewData inherts并在return语句中返回相同内容。因此,我认为这是ASP.NET文件顶部的Inherits属性的问题。但是,如果您在“即将到来的晚餐”页面(从Details.aspx和LINQ文件生成,在今天的日期之后获得所有晚餐时)尝试创建或编辑新晚餐时收到错误,请转到进入你的'Controllers'目录,特别是DinnerController.cs。然后查看Edit和/或Create方法。答案就在这里。如果你在这些方法上加上断点,你应该能够弄明白。如果没有,请继续阅读:

查看失败的地方,“返回...”行。也许我是唯一一个忘记改变这个的人,但是我的错误与人们在这个页面中得到的相同,这个我如何修复它......'返回(晚餐)'行,在创建和编辑(以及您遇到问题的任何其他人),他们正在使用NerDinner.Model.Dinner / ViewData方法。但是,如果您将其更改为ViewModel返回方法,则应该修复它,例如:'return(new DinnerFormViewModel(dinner));',它应该适合您。我希望这会有所帮助,因为这是我的问题所在。只是一个简单的俯视。