无法从javascript ajax发送int数组

时间:2018-02-19 14:39:38

标签: javascript arrays json ajax asp.net-mvc

我正在创建一个网络应用,其中我有一个类似于以下的模型

public class Data
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int[] Routes { get; set; }
}

在我的javascript中我有像

这样的数据
var Routes = [];
    for (var a = 0; a < 5; a++) {
        Routes.push(a);
    }
    var model = {
        ID: 1,
        Name: 'TEST',
        Routes: JSON.stringify(Routes)
    };

在我的ajax调用中它看起来像

Data: model

但我的 Routes 正在转换为字符串 如果我写

var model = {
        ID: 1,
        Name: 'TEST',
        Routes: Routes
    };

然后 模型中的**int[] Routes**显示为null 如果我写     contentType:“json”, 在我的Ajax调用中, 我模型的数据显示为空

如果我想要一个int数组并且不想将其转换为字符串

,我该怎么办?

1 个答案:

答案 0 :(得分:0)

您尚未分享使用ajax发送数据的方式。所以我正在做一些假设并给你一个可以帮助你的通用答案。

JSON.stringify方法将javaScript对象转换为相应的JSON字符串。因此,当您执行第JSON.stringify(Routes)行时,您会得到一个值为[0,1,2,3,4]字符串。所以基本上你试图发送的JSON对象看起来像这样

{
    "ID": 1,
    "Name": "TEST",
    "Routes": "[0,1,2,3,4]"
}

您可以看到Routes属性值是字符串,而不是int数组。当此数据发送到服务器时,默认模型绑定器将其视为字符串(可以包含任何内容),并且无法将其映射到int数组。

您应该做的是,将Routes属性值设置为int数组。通过ajax发送数据时,您可以使用JSON.stringify将整个json对象转换为它的等效字符串,并使用结果字符串作为ajax调用的data属性,同时指定{{1}标头值为content-type

application/json

var routes = []; for (var a = 0; a < 5; a++) { routes.push(a); } var model = { ID: 1, Name: 'TEST', Routes: routes }; $.ajax({ url: "/YourUrlToYourActionMethodAjaxPost", type: "POST", data: JSON.stringify(model), contentType: "application/json" }).done(function (result) { console.log('result', result); }).fail(function(a, b, c) { console.log(a); }); 行将在请求字符串值中生成以下字符串,这就是我们发送给服务器的内容。

JSON.stringify(model)

假设你有一个使用{"ID":1,"Name":"TEST","Routes":[0,1,2,3,4]} 类作为参数类型的动作方法,这应该可行。

Data