为啥从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null?

Posted

技术标签:

【中文标题】为啥从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null?【英文标题】:Why the parameter being passed to the controller method from jquery is null even it's not?为什么从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null? 【发布时间】:2018-09-20 22:50:45 【问题描述】:

我一直在尝试从 jquery json 调用控制器中的 .cs 方法,它被调用但传递的参数始终为空。为什么?即使我检查了控制台日志,它也显示了正在传递的值,但不知何故它没有传递给方法。它是空的。

 $('#AppointmentDate').change(function () 

                var AppointmentDate = '2018-04-30'; //document.getElementById('AppointmentDate').value;

                $.ajax
                (
                    url: '@Url.Action("GetTimeSlotsByDate", "Appointment")',
                    type: 'GET',
                    contentType: "application/json; charset= utf-8",
                    data: JSON.stringify(AppointmentDate),
                    dataType: 'json',
                    success: function (results) 

                        $("#fk_TimeSlotID").html(""); // clear before appending new list 

                        $.each(results, function (i, slot) 
                            $("#fk_TimeSlotID").append(
                                $('<option></option>').val(slot.TimeSlotID).html(slot.FromTo));
                        );

                        console.log('Time slots returned');
                        console.log(AppointmentDate);

                    
                );

方法:

 public ActionResult GetTimeSlotsByDate(DateTime? RequestedAppointmentDate)
        
            TimeSlotsRepository TimeSlotsRep = new TimeSlotsRepository();
            List<TimeSlotsModel> ListTimeSlotsModel = TimeSlotsRepository.getTimeSlotsByDate(RequestedAppointmentDate);

            return Json(ListTimeSlotsModel, JsonRequestBehavior.AllowGet);
        

这是呈现的网址

http://localhost:13924/Appointment/GetTimeSlotsByDate?"2018-04-30"

【问题讨论】:

data: RequestedAppointmentDate: AppointmentDate 并删除无意义的contentType: "application/json; charset= utf-8",(GET 没有正文) @StephenMuecke:我做到了,但它仍然不起作用。同样的问题 它确实有效(它会生成带有..../GetTimeSlotsByDate?RequestedAppointmentDate=2018-04-30的正确网址 如果您使用您提供的代码(硬编码日期字符串)并且更改为data: RequestedAppointmentDate ...,那么它应该可以工作。如果您使用的是$("AppointmentDate").val(),那么很可能 that val 的格式不正确,因此它不会被识别为日期(例如可能是 dd/mm/yyyy)格式,而 .Net 会期待mm-dd-yyyy 格式)。 @IanKemp,OP 正在以 iso 格式发送日期,因此它始终会正确绑定 【参考方案1】:

您可以将数据转换为查询字符串参数并传递给服务器 网址为

somesite.com/Appointment/GetTimeSlotsByDate?RequestedAppointmentDate=your date

【讨论】:

将控制器中的日期参数定义为字符串,然后您可以将字符串解析为日期时间【参考方案2】:

试试这个,它对我有用

 $('#AppointmentDate').change(function () 

           // var AppointmentDate = '2018-04-30'; //document.getElementById('AppointmentDate').value;

            $.ajax
            (
                url: '@Url.Action("GetTimeSlotsByDate", "Appointment")',
                type: 'GET',
                contentType: "application/json; charset= utf-8",
                //data: JSON.stringify(AppointmentDate),
                data:  RequestedAppointmentDate: "2018-04-30" ,
                dataType: 'json',
                success: function (results) 

                    $("#fk_TimeSlotID").html(""); // clear before appending new list 

                    $.each(results, function (i, slot) 
                        $("#fk_TimeSlotID").append(
                            $('<option></option>').val(slot.TimeSlotID).html(slot.FromTo));
                    );

                    console.log('Time slots returned');
                    console.log(AppointmentDate);

                
            );

【讨论】:

以上是关于为啥从 jquery 传递给控制器​​方法的参数即使不是 null 也是 null?的主要内容,如果未能解决你的问题,请参考以下文章

jquery Ajax 调用 - 数据参数未传递给 MVC 控制器操作

使用 jQuery Ajax 将对象列表传递给 MVC 控制器方法

将参数值从 jquery 数据表 ajax 传递给控制器

为啥将 null 传递给 params 方法会导致 null 参数数组?

jquery 如何获取从客户端传递过来参数的值(typeId,tableCode,empCode)

JQuery将'空参数传递给MVC控制器方法