【问题标题】:unable to send int array from javascript ajax无法从 javascript ajax 发送 int 数组
【发布时间】:2018-07-29 19:47:00
【问题描述】:

我正在创建一个网络应用程序,其中我有一个如下所示的模型

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
    };

那么 model 中的**int[] Routes** 显示为空 如果我写 内容类型:“json”, 然后在我的 Ajax 调用中, 我的模型数据显示为空

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

【问题讨论】:

  • 如果数据为空,那么它没有在服务器端正确序列化..或服务器代码条件为该请求返回空。检查为什么服务器返回 null
  • 确实需要控制器操作代码和ajax 代码。但是,将您的 Routes 数组字符串化当然没有任何意义。
  • 像这样data: JSON.stringify(model)将整个模型串起来。

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


【解决方案1】:

您尚未分享使用 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 属性,同时将 content-type 标头值指定为 @987654331 @。

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 类作为参数类型的操作方法,这应该可以工作。

[HttpPost]
public ActionResult SaveData(Data model)
{
   // to do : do something with model
   // to do : return something   
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-28
    • 2012-02-24
    • 2011-07-16
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2015-10-11
    相关资源
    最近更新 更多