在单个ActionResult中返回三个IQueryable列表以在视图中显示

时间:2013-04-01 10:49:08

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

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

我遇到了一个问题,我不确定转向解决方案的方式,或者我确实走了正确的道路。下面的代码最能说明我要做的事情。我知道ViewModel不对,但我认为它显示了我想要做的事情。 (allTransactions和各种日子的变量都是为了简洁而被剪掉了。)

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

目的是显示一览一览的屏幕,其中列出了昨天的交易,今天是中间,明天是交易。< / p>

我最初尝试了@ Html.Partial,但当然这只是向我展示了三次相同的列表。我也在视图中尝试了一些if语句,但是当我重复自己时,有些事情并不是这样做的。

有人可以就我应该阅读哪些方面以及如何解决这个问题提出一些建议吗?提前谢谢!

2 个答案:

答案 0 :(得分:0)

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

在这种情况下,类似这样的事情会:

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

答案 1 :(得分:0)

我假设您使用的是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);