我完成了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
答案 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.Dinners
和Model.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));',它应该适合您。我希望这会有所帮助,因为这是我的问题所在。只是一个简单的俯视。