将数组从JavaScript传递到Asp.net核心

时间:2017-03-23 07:36:21

标签: javascript asp.net

以下是调用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数组为空

1 个答案:

答案 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添加到a​​jax属性

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。