温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - DateRangePicker MVC razor
asp.net-mvc c# razor daterangepicker

c# - DateRangePicker MVC剃须刀

发布于 2020-03-30 21:50:48

我想使用Razor语法从View将选定的日期范围传递给控制器​​。如何实现?

我正在使用此daterangepicker http://www.daterangepicker.com

我可以使用viewBag传递值,但是我想知道使用Razor语法传递值的正确方法。

我已经尝试过了,@Html.TextBox("Model.Date", null, new { @id="reservationtime", @class = "form-control pull-left" }) 但是它也没有设置daterange值。

<div class="box-body">
    <div class="form-group">
        @Html.DropDownListFor(m => m.employeeCode, Model.EmployeeList, "All",
       new { @class = "form-control select2", @id = "employeeCode", @name = "employeeCode"  })

    </div>
</div>

<div class="box-body">
    <div class="form-group">
        <div class="input-group date timepicker"
             data-date-format="HH:mm"
             data-date-useseconds="false"
             data-date-pickDate="false">
            <div class="input-group-addon">
                <i class="fa fa-clock-o"></i>
            </div>
            <input type="text" class="form-control pull-left" id="reservationtime">

        </div>
            <!-- /.input group -->
    </div>
</div>

@section Scripts {
    <script type="text/JavaScript">

        $(document).ready(
            function () {
                $("#employeeCode").select2();

                $('#reservationtime').daterangepicker({
                    //use24hours: true,
                    timePicker: true,
                    timePickerIncrement: 30,
                    format: 'MM/DD/YYYY HH:mm',
                    //showMeridian: false,
                    timePicker24Hour: true,

                })
                //Date range picker with time picker
                $('#reservationtime').on('apply.daterangepicker', function (ev, picker) {
                    //Model.startDate = picker.startDate.format('YYYY-MM-DD HH:mm');
                 //   Model.endDate = picker.endDate.format('YYYY-MM-DD HH:mm');
                  // PASS VALUE TO CONTROLLER HERE
                    console.log(picker.startDate.format('YYYY-MM-DD HH:mm'));
                    console.log(picker.endDate.format('YYYY-MM-DD HH:mm'));

                });
            }               

        );    

        function applyFilter() {    
            window.location.href = '@Url.Action("Index", "History")';     
        }   
    </script>
}


public ActionResult Index(HistoryModel model)
{
    //
}

查看更多

提问者
plural
被浏览
103
Przemysław 2020-01-31 19:36

您可以使用JQuery如下所示。只是使用POST将其传递给控制器​​,但您需要更改Index()参数才能匹配。

$.ajax({
    url: '/Home/Index',
    type: 'POST',
    data: {
        startDate: picker.startDate.format('YYYY-MM-DD HH:mm'),
        endDate: picker.endDate.format('YYYY-MM-DD HH:mm'),
    },
    contentType: 'application/json; charset=utf-8'
});

其他方法是为数据创建隐藏的输入。当您从datepicker中选择日期范围时,则应使用JS设置此隐藏字段的值,并在表单提交时将其与模型一起传递。

@Html.HiddenFor(model => model.StartDate)
@Html.HiddenFor(model => model.EndDate)