将数字数组从ajax传递给控制器

时间:2017-07-21 22:15:43

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

我知道这是一个热门话题,我已经尝试过所有我已经找到的解决方案,但无济于事。我已经使用了这些问题中包含的所有解决方案:Pass a List from javascript to controller。我把我的测试简化为荒谬简单。我进入控制器,但我的控制器输入参数是{int [0]}。我确认我的数组数据在JavaScript和ajax调用中看起来很好。

任何人都可以告诉我我错过了什么吗?

JavaScript代码

-Dspring.profiles.active=YourProfile

控制器代码

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

2 个答案:

答案 0 :(得分:3)

使用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

答案 1 :(得分:2)

我用:

public ActionResult GetBuildingsById(String selectedIds)
{
    // this line convert the json to a list of your type, exactly what you want.
    IList<int> Ids = new JavaScriptSerializer().Deserialize<IList<int>>(selectedIds);     
    return Content(ids[0].ToString());
}

这会让你选择Id = [565,573,571] 并创建类型列表

的列表