首页 > 解决方案 > 无法从 .Net Bootstrap Datepicker 中的 DatePicker 控件的动态数量中检索日期列表

问题描述

我在页面上有多个 DatePickers,它们使用从 Controller 传递的模型正确设置了初始值。

但是,当我选择一个日期时,该值不会存储在 Model 中,当尝试在 Controller 中接收时,该值始终为空。

@Html.TextBoxFor(m => m.FirstDate, Model.FirstDate.ToString(), 
                        new {@class = "input-group datepicker date",
                        id = "datepicker@i", type = "text", 
                        style = "max-width:123px;min-width:123px" }) 

JS>

@{var startDate = @Model.SelectedDates[0].EventDate;}
        $(".datepicker").datepicker({
            startDate: '@startDate',
            endDate: '+365D',
            weekStart: 1,
            beforeShowDay: function (date) {
                if (dates.indexOf(formatDate(date)) < 0)
                    return {
                        enabled: false
                    }
                else
                    return {
                        enabled: true
                    }
            },
            format: 'dd-mm-yyyy',

        });

传递给控制器​​的模型将 FirstDate 作为 DateTime 但它始终是默认日期。从未设置使用选择器选择的日期。

编辑>我现在明白,作为 View 模型一部分的列表不是传递回控制器的列表。有没有办法在视图中构建列表而不使用 Ajax 回调?

我想不出其他方法来为未知数量的日期选择器存储日期。

标签: .netdatepickerasp.net-core-mvcbootstrap-datepicker

解决方案


如果有人对如何在不刷新页面和不使用 AJAX 的情况下处理传回控制器的未知数量的参数感兴趣,我找到了一种解决方法

我像这样定义每个日期选择器:

<input type="text" class="input-group datepicker date" name="@pickerReference"/>

这些可以根据您通过 Model.YourPickerListDates 从控制器提供的列表创建

将表单提交回控制器时,不是将每个选择器硬输入到模型或控制器的参数中,而是IFormCollection form与返回的模型并排添加。

在控制器中,您可以遍历 formCollection 或像这样选择每个日期:

string value = Convert.ToString(form["pickerReference"]);

我想不出更好的解决方案,因为返回的模型必须具有强定义的值。如果您不想使用 formCollection 返回值,则可能需要调用 Ajax 或其他方法。


推荐阅读