以下是调用asp.net CustomHeatMapDate
的javascript代码$('.Date').change(function () {
var data = [];
console.log();
var dateList = [{"Date":"03/23/2016"}, {"Date":"03/24/2016"}];
$.ajax({
async: true,
type: "GET",
url: "/Home/CustomHeatMapDate",
data: { Date: dateList },
dataType: "json",
success: function (data) {
console.log(data);
for (var i = 0, len = data.length; i < len; i++) {
pushdata(data[i]);
}
}
})
这是Asp.net控制器
public IActionResult CustomHeatMapDate(Array[] Date)
{
return View();
}
但是Date数组为空
答案 0 :(得分:1)
有一些问题,我会仔细阅读并解释原因和解决方法。
第一个是您要发送给控制器的数据,您已对其进行了结构化,因此结果将为{Date:[{"Date":"03/23/2016"}, {"Date":"03/24/2016"}]}
,当它看起来像时这个{{1}然后你将发送一个平面阵列而不是一个对象数组。
第二个问题是您的控制器中的数据类型,您已将其设置为{Date:["03/23/2016", "03/24/2016"]}
这是期望的数组和数组。你应该拥有的是Array[]
,现在需要一组日期(时间)。这意味着您必须将发送日期更改为DateTime[]
,以便正确反序列化。
最后一个事实是你作为一个2016-03-23
做了这个事实,它并没有真正处理在参数中传递结构化数据,因为它将它全部放在查询字符串中,作为你的日期变得越来越长,你可能会冒更长的风险。我推荐使用GET
,但如果您确实想要POST
,那么Alexandru-Ionut Mihai表示将GET
添加到ajax属性
TL; DR 客户端和服务器端的数据结构错误
将所有代码放在一起应该看起来像这样
<强> JS 强>
traditional:true
<强> C#强>
$('.Date').change(function () {
console.log();
var dateList = ["2016-03-23", "2016-03-24"];
$.ajax({
type: "POST",
url: "/Home/CustomHeatMapDate",
data: {
Date: dateList
},
dataType: "json",
success: function (data) {
console.log(data);
for (var i = 0, len = data.length; i < len; i++) {
pushdata(data[i]);
}
}
})
});
P.S没有必要指定public ActionResult CustomHeatMapDate(DateTime[] Date)
{
return Ok();
}
,因为默认情况下,JQuery Ajax会将其设置为true。