我有一个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; }
}
我想在视图中显示这些项目,以便按月份名称进行分组。例如:
十月
EventA Title,EventA Description等。
EventB Title,EventA Description etc。
十一月
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
}
}}
答案 0 :(得分:4)
假设开始日期和结束日期在同一个月,我会做类似的事情(在控制器中):
var groupedEvents = _db.Events.ToList().GroupBy(k => new DateTime(k.StartDate.Year, k.StartDate.Month, 1)).OrderBy(k => k.Key).ToDictionary(k => k.Key, v => v.ToList());
return View(groupedEvents);
然后在foreach中通过字典查看。您可以通过以下方式获取月份名称:
@model IDictionary<DateTime, List<Event>>
@foreach(var item in Model)
{
//Display month name
<h1>@item.Key.ToString("MMM", CultureInfo.InvariantCulture);</h1>
foreach(var ev in item.Value)
{
//Row specific code
}
}