3

我完成了 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 还很陌生,所以我需要这方面的帮助。

谢谢,
伊莱

4

5 回答 5

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 } );
}
于 2010-03-20T21:35:31.047 回答
3

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

于 2010-03-20T21:35:38.667 回答
1

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

一般来说,您当然也可以使用ViewData将多个值从您的控制器传输到您的视图:

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

如需更多信息,请查看此链接

于 2010-03-20T21:57:53.837 回答
0

只需简单地使用 Dinners.Count 属性即可。

于 2010-03-20T21:52:26.150 回答
0

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

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

于 2010-07-17T17:00:17.633 回答