这是我的代码/视图。
<form class="form-horizontal">
<div class="portlet-body form">
<div class="form-group">
@foreach (var date in ViewBag.MissingDays)
{
var isoDate = date.ToString("yyMMdd");
<div class="col-md-2">
<input type="checkbox" id="isoDate" name="isoDate" value="@isoDate" />
@date.ToString("ddd").Substring(0, 2)
@isoDate
</div>
}
</div>
</div>
现在,它会像这样打印每个日期:“ Mo yymmdd tu yymmdd we yymmdd”
但是我想做的是使所有属于的日期都可以在may选项卡下,十月下的所有日期都可以在十月下,依此类推。
现在有点混乱。
因此,我想尝试的是使这些内容符合以下要求,即要说“五月”,而所有缺少的日期可能都在该部分下,依此类推。
这就是我如何从数据库中获得丢失的日子(这是我的数据库层)
public List<DateTime> GetConsultantMissingDays(Guid consultantId)
{
//List<DateTime> dates = new List<DateTime>();
DateTime oldDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(-3);
var dates = db.TimeReports.Where(x => x.FK_ConsultantID == consultantId && x.Date >= oldDate).Select(x => x.Date);
//db.
return Constants.WorkDays.Except(dates).ToList();
}
这就是我将日期获取到Viewbag.MissingDays(我的控制器)的方式
var missingdays = new DatabaseLayer().GetConsultantMissingDays(Constants.CurrentUser(User.Identity.Name));
if (missingdays.Count == 0)
{
ViewData["missingDays"] = "";
}
else
{
ViewBag.MissingDays = missingdays;
}
ViewData.Model = projectData;
return View();
最佳答案
我现在无法检查确切的HTML布局,但可以给您一个提示;)
您应该按月对日期进行分组,然后遍历分组项:
<form class="form-horizontal">
<div class="portlet-body form">
<div class="form-group">
@foreach(var @group in ((List<DateTime>)ViewBag.MissingDays).GroupBy(x => x.Month))
{
<div class="col-md-2">
foreach (var date in @group)
{
var isoDate = date.ToString("yyMMdd");
<input type="checkbox" id="isoDate" name="isoDate" value="@isoDate" />
@date.ToString("ddd").Substring(0, 2)
@isoDate
}
</div>
}
</div>
然后,您可以添加一些列标题以确定正确的月份。
编辑:根据@SimonGates的评论-考虑到上述解决方案并未考虑多年。如果年份不同,则应延长分组操作时间。