0

我是 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.Partial,但当然这只是向我展示了三遍相同的列表。我还在视图中尝试了一些 if 语句,但是当我重复自己时,这样做感觉有些不对劲。

谁能提供一些关于我应该阅读哪些领域以及我应该如何解决这个问题的建议?提前致谢!

4

2 回答 2

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
于 2013-04-01T10:58:00.390 回答
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);
于 2013-04-01T10:59:09.893 回答