这是我的代码/视图。

<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选项卡下,十月下的所有日期都可以在十月下,依此类推。

现在有点混乱。c# - 右选项卡下的asp.net右月-LMLPHP

因此,我想尝试的是使这些内容符合以下要求,即要说“五月”,而所有缺少的日期可能都在该部分下,依此类推。

这就是我如何从数据库中获得丢失的日子(这是我的数据库层)

        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的评论-考虑到上述解决方案并未考虑多年。如果年份不同,则应延长分组操作时间。

08-04 17:16