You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC中input type=month失效问题求助

解决input type=month与DateTime字段过滤失效问题

问题场景

开发月度销售报表时,使用input type=month仅收集年月信息,视图代码如下:

<div class="form-group">
    <label for="Date">Date</label>
    <input type="month" class="form-control" name="Date" id="Date" />
</div>

需要将输入的年月与模型中DateTime类型的Entrydate字段做过滤对比,原控制器过滤代码如下:

private IEnumerable<Sale> GetFilteredData(IEnumerable<Sale> result, DateTime? Date)
{
    if (Date != null || Date != default(DateTime))
    {
        result = result.Where(a => a.Entrydate >= Date);
    }
    return result;
}

切换为type=month后过滤功能失效,以下是具体修复方案:

修复步骤

1. 调整过滤逻辑为月度区间匹配

input type=month提交的格式是YYYY-MM,绑定到DateTime?时会被解析为该月第一天的0点(如2024-05-01 00:00:00)。原代码仅判断Entrydate >= Date会包含目标月及之后所有数据,不符合月度报表需求,需改为筛选当月完整区间:

private IEnumerable<Sale> GetFilteredData(IEnumerable<Sale> result, DateTime? selectedMonth)
{
    if (selectedMonth.HasValue)
    {
        DateTime startOfMonth = new DateTime(selectedMonth.Value.Year, selectedMonth.Value.Month, 1);
        DateTime endOfMonth = startOfMonth.AddMonths(1);
        // 筛选Entrydate在当月第一天到下月第一天之间(不包含下月第一天)的数据
        result = result.Where(a => a.Entrydate >= startOfMonth && a.Entrydate < endOfMonth);
    }
    return result;
}

2. 修正条件判断的逻辑错误

原代码的if (Date != null || Date != default(DateTime))存在逻辑漏洞:||会导致空值时仍执行过滤(因为null != default(DateTime)为真),应改为使用HasValue判断参数是否有效:

// 正确的非空判断
if (selectedMonth.HasValue)
{
    // 执行过滤逻辑
}

3. 确保模型绑定正常(可选)

若出现参数绑定失败,可在视图的input标签中明确格式,或在控制器参数上添加绑定标识:

<!-- 明确输入格式 -->
<input type="month" class="form-control" name="Date" id="Date" asp-format="{0:yyyy-MM}" />

或在控制器参数上标注:

private IEnumerable<Sale> GetFilteredData(IEnumerable<Sale> result, [Bind(Prefix = "Date")] DateTime? selectedMonth)
{
    // 逻辑代码
}

内容的提问来源于stack exchange,提问作者muhammed nihal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 06:06:25