在单个ActionResult中返回三个可查询列表以显示在视图中
本文关键字:查询 列表 视图 显示 三个 ActionResult 单个 返回 | 更新日期: 2023-09-27 18:06:54
我是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);