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

ASP.NET Core中Bootstrap日期范围选择器无法绑定模型值求助

解决ASP.NET Core中Bootstrap Date Range Picker与模型绑定的问题

我来帮你搞定这个绑定问题,看了你的代码,主要问题出在表单字段命名冲突和模型绑定的参数匹配上,咱们一步步来修正:

1. 修正表单输入框的命名冲突

你现在的input标签同时用了asp-for="date"和name="datefilter",asp-for会自动生成name="date"属性,手动加的name="datefilter"会覆盖它,导致表单提交时,后台模型的date属性找不到对应的值(因为提交的参数名是datefilter而不是date)。

修改页面代码,去掉手动设置的name属性,用asp-for自动生成的命名,同时给input加个类方便jQuery选择:

<div class="form-group">
    <label asp-for="date">Date Range*</label>
    <input type="text" asp-for="date" class="date-range-picker" />
    <div class="invalid-feedback">
        Please Select Date Range.
    </div>
</div>

2. 调整jQuery选择器匹配正确的输入框

把jQuery里的选择器改成刚加的类名,确保能正确选中目标输入框:

$(function () {
    $('.date-range-picker').daterangepicker({
        autoUpdateInput: false,
        locale: {
            cancelLabel: 'Clear'
        }
    });

    $('.date-range-picker').on('apply.daterangepicker', function (ev, picker) {
        // 设置输入框的值为选中的日期范围
        $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY'));
    });

    $('.date-range-picker').on('cancel.daterangepicker', function (ev, picker) {
        $(this).val('');
    });
});

3. 确保模型绑定正常工作

你的模型属性public string date { get; set; }现在可以正确接收表单提交的date参数了,因为输入框的name属性已经和模型属性名一致(asp-for="date"会生成name="date")。

进阶方案:拆分日期到模型的两个属性(如果需要单独处理开始/结束日期)

如果你的业务逻辑需要分别获取开始和结束日期,而不是一个拼接的字符串,可以添加两个隐藏输入框,分别绑定模型的两个属性:

模型修改:

public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }

页面代码添加隐藏字段:

<div class="form-group">
    <label>Date Range*</label>
    <input type="text" class="date-range-picker" />
    <input type="hidden" asp-for="StartDate" />
    <input type="hidden" asp-for="EndDate" />
    <div class="invalid-feedback">
        Please Select Date Range.
    </div>
</div>

jQuery代码调整:

$(function () {
    $('.date-range-picker').daterangepicker({
        autoUpdateInput: false,
        locale: {
            cancelLabel: 'Clear'
        }
    });

    $('.date-range-picker').on('apply.daterangepicker', function (ev, picker) {
        $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY'));
        // 给隐藏字段赋值,绑定到模型的两个属性
        $('input[name="StartDate"]').val(picker.startDate.format('YYYY-MM-DD'));
        $('input[name="EndDate"]').val(picker.endDate.format('YYYY-MM-DD'));
    });

    $('.date-range-picker').on('cancel.daterangepicker', function (ev, picker) {
        $(this).val('');
        $('input[name="StartDate"]').val('');
        $('input[name="EndDate"]').val('');
    });
});

这样后台就能直接拿到StartDate和EndDate两个DateTime类型的属性,处理起来更方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:32:46