在单个ActionResult中返回三个可查询列表以显示在视图中



我是ASP新手。. NET, MVC, c#和一般的编程,所以我一直在做一些个人项目和各种教程来学习。

我遇到了一个问题,我不知道该走哪条路来解决问题,或者我是否真的走对了路。下面的代码最好地解释了我要做的事情。我知道ViewModel是不对的,但我认为它显示了我要做的事情。(为简洁起见,所有事务和不同日期的变量都被剪短了)。

var yesterdaystransactions = allTransactions.Where(t => t.WhenItHappensId == yesterday);
var todaystransactions = allTransactions.Where(t => t.WhenItHappensId == today);
var tomorrowstransactions = allTransactions.Where(t => t.WhenItHappensId == tomorrow);
var ViewModel = yesterdaystransactions.ToList() + todaystransactions.ToList() + tomorrowstransactions.ToList();

目的是显示一个一目了然的屏幕,上面是昨天的交易列表,中间是今天的交易列表,下面是明天的交易列表。

我试过@Html。一开始是部分的,但当然,它只是给我显示了同样的列表三次。我也在视图中尝试了一些if语句,但是这样做感觉不太对,因为我在重复自己。

谁能给我一些建议,我应该读哪些方面的书,我应该如何处理这个问题?提前感谢!

你在正确的轨道上-你需要一个视图模型。这个类只是用来包含渲染视图所需的所有数据。

在这种情况下,像这样做:

public class MyActionViewModel
{
  public IEnumerable<Transaction> YesterdaysTransactions { get; set; }
  public IEnumerable<Transaction> TodaysTransactions { get; set; }
  public IEnumerable<Transaction> TomorrowsTransactions { get; set; }
}

然后在你的控制器中,你填充这个类的实例:

var vm = new MyActionViewModel
  {
    YesterdaysTransactions = allTransactions.Where(t => t.WhenItHappensId == yesterday),
    TodaysTransactions = allTransactions.Where(t => t.WhenItHappensId == today),
    TomorrowsTransactions = allTransactions.Where(t => t.WhenItHappensId == tomorrow),
  }
;
return View( vm );

你要做的最后一件事是告诉你的视图你要给它的视图模型:

@model MyActionViewModel

那么你可以像这样访问数据

@Model.TodaysTransactions

假设您正在使用AJAX,那么您应该使用JsonResult

return Json(new {
  yesterdaystransactions = allTransactions.Where(t => t.WhenItHappensId == yesterday).ToList(),
  todaystransactions = allTransactions.Where(t => t.WhenItHappensId == today).ToList(),
  tomorrowstransactions = allTransactions.Where(t => t.WhenItHappensId == tomorrow).ToList()
});

如果你想渲染视图,那么创建ViewModel

var model = new MyViewModel {
  Yesterdaystransactions = allTransactions.Where(t => t.WhenItHappensId == yesterday).ToList(),
  Todaystransactions = allTransactions.Where(t => t.WhenItHappensId == today).ToList(),
  Tomorrowstransactions = allTransactions.Where(t => t.WhenItHappensId == tomorrow).ToList()
};
return View("_SomePartialView", model);

最新更新