javascript - 将数字数组从 ajax 传递到 Controller

标签 javascript c# ajax asp.net-mvc-3 controller

我知道这是一个流行的话题,我已经尝试了所有我能找到的解决方案,但都无济于事。我已使用此问题包含的所有解决方案:Pass a List from javascript to controller 。我已经将我的测试简化得非常简单。我进入 Controller ,但我的 Controller 输入参数是 {int[0]}。我确认我的数组数据在 JavaScript 和 ajax 调用中看起来不错。

谁能告诉我我错过了什么?

JavaScript 代码

var selectedIds = [];
selectedIds.push(565);
selectedIds.push(573);
selectedIds.push(571);
// selectedIds = [565, 573, 571]

$.ajax({
    type: "POST",
    traditional: true,
    dataType: "json",
    data: { "ids": JSON.stringify(selectedIds) },
    //data: { "ids": selectedIds},
    //data: { ids: selectedIds},
    url: "api/services/getbuildingsbyid",
    success: function (result) {
        return result;
    }
});

Controller 代码

[HttpPost]
public bool GetBuildingsById(int[] ids)
{
    var lookAtIds = ids;     // {int[0]}
    return true;
}

最佳答案

通过使用 JSON.stringify(selectedIds),您可以将 int 数组转换为该数组的字符串表示形式。

AJAX POST 最终如下所示:

{ "ids": "[565, 573, 571]" }

而不是

{ "ids": [565, 573, 571] }

如果您只使用数据变量,应该可以解决问题:

data: { "ids": selectedIds },

编辑-

向后看,通过为数据设置变量,我们可以看到以下内容:

var data = {"ids": JSON.stringify(selectedIds)}
typeof(data["ids"]) // string 
data["ids"][0]      // '['

data = {"ids": selectedIds}
typeof(data["ids"]) // object
data["ids"][0]      // 565

关于javascript - 将数字数组从 ajax 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247464/

相关文章:

JavaScript focus() 函数不会将文本区域集中在页面加载上

javascript - 在属性 unicode 无法正常工作之前引导

C# 异步下载速度

php - 在我的 ajax 民意调查中,.empty() 无法在 PHP 中使用 js

javascript - 将数据表内容作为参数发送给 php

javascript - 获取日期最早的属性

javascript - 是否有 paper.js 选项可以在填充下绘制路径描边?

c# - ASP.NET核心3.1 : How to deserialize camelcase json from webapi to pascalcase

c# - Jqgrid 以 inlineNav 样式添加新的空白行

javascript - 修改 POST 请求以表示数量