[英]Passing Array from JavaScript to Asp.net Core
这是调用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:[{"Date":"03/23/2016"}, {"Date":"03/24/2016"}]}
看起来应该像 {Date:["03/23/2016", "03/24/2016"]}
那么您将发送一个平面数组,而不是对象数组。
第二个问题是控制器中的数据类型,您已将其设置为Array[]
这是数组的期望值。 您应该拥有的是DateTime[]
,现在将需要一个日期(时间)数组。 这意味着您必须更改发送日期,直到2016-03-23
这样它才能正确反序列化。
最后一个事实是,您以GET
,实际上并不能真正处理参数中传递的结构化数据,因为它会将所有数据都放入查询字符串中,随着日期数组的变长,您可能会面临以下风险:它变得太长了。 我建议使用POST
代替,尽管如果您确实要执行GET
那么正如Alexandru-Ionut Mihai所说的,在ajax属性中添加traditional:true
TL; DR客户端和服务器端的数据结构错误
将所有内容放在一起,代码应如下所示
JS
$('.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]);
}
}
})
});
C#
public ActionResult CustomHeatMapDate(DateTime[] Date)
{
return Ok();
}
PS无需指定async:true
,因为默认情况下,JQuery Ajax会将其设置为true。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.