【发布时间】:2014-11-21 14:07:28
【问题描述】:
我有一个 mvc razor 视图,它的模型填充如下:
public class HomeController : Controller
{
private IDataSource _db;
public HomeController (IDataSource db)
{
_db = db;
}
public ActionResult Events()
{
var allevents = _db.Events;
ViewBag.Title = "Events";
return View(allevents);
}
}
事件模型如下所示:
public class Event
{
public virtual int Id { get; set; }
public virtual string Title { get; set; }
public virtual string Description { get; set; }
public virtual Location Location {get;set;}
public virtual DateTime StartDate {get;set;}
public virtual DateTime EndDate { get; set; }
}
我想在我的视图中显示这些项目,以便它们按月份名称分组。例如:
10 月
EventA 标题、EventA 描述等
EventB 标题、EventA 描述等
11 月
EventC 标题、EventC 描述等
如果可能的话,您可以更进一步,将其按年划分,然后按月划分,但这不是完全必要的,因为我看不到事件会提前一年多进入的情况。
我已经在我的剃刀视图中尝试过这个,但似乎有点不对劲......
@{var monthList = from e in Model
group e by e.StartDate.Month into g
orderby g.Key
select g;
foreach(var monthGroup in monthList)
{
string month = monthGroup.Key.ToString();
<h2 class="h4 pi-weight-700 pi-uppercase pi-has-bg pi-margin-bottom-25">
@month
</h2>
foreach (Model e in monthGroup)
{
// do something with the events
}
}}
【问题讨论】:
-
这应该在控制器中完成,是 _db.Events IQueryable 吗?如果是这样,请使用 LINQ 对它们进行分组。
-
您的
_db可能返回IEnumerable或IQueryble对象。只需在您的模型上调用GroupBy,然后调用ToDictionary。这里有很多例子。喜欢this one。 -
言归正传,你试过什么?
-
如果您有事件 A:开始日期 - 2014 年 1 月 1 日;结束日期 - 2014 年 9 月 1 日。事件 B:开始日期 - 2014 年 3 月 1 日;结束日期 - 2014 年 8 月 1 日。您希望如何显示它们?
-
抱歉,对 MVC 和 LINQ 来说非常陌生。用我尝试过的方法更新了我的问题。
标签: c# asp.net-mvc-4 razor