如何将 int 列表从 Javascript (Ajax) 发送到 C#?

问题描述 投票:0回答:2

通常我会写

 $.ajax({
            url: '@Url.Action("PlantHistoryContent", "PlantStatus")',
            data: {id: 1},
            async: false,
            type: "POST"
        })

当我想在 C# 中将整数 id 传递到服务器端时:

public void PlantHistoryContent(int id)
{
 ///
}

如何对整数列表执行相同操作?

所以我有一个未知长度的对象列表并想将其作为列表传递到服务器端?

我的服务器端应该是

public void PlantHistoryContent(List<int> id)
{
 ///
}

ajax调用数据参数怎么写到这个?

javascript c# ajax
2个回答
4
投票

JavaScript 中的列表如下所示:

var list = [ 1, 2, 3, 4 ];

要构建它,你可以这样做:

var list = [];
list.push(1);
list.push(2);
list.push(3);
list.push(4);

然后,当您发送它时,您可以执行以下操作:

$.ajax({
    url: '@Url.Action("PlantHistoryContent", "PlantStatus")',
    data: { ids: list },
    async: false,
    type: "POST"
})

$.ajax({
    url: '@Url.Action("PlantHistoryContent", "PlantStatus")',
    data: { ids: [ 1, 2, 3, 4 ] },
    async: false,
    type: "POST"
})

默认使用表单编码。请求正文将如下所示:

ids[0]=1&ids[1]=2&ids[2]=2&ids[3]=3

使用表单编码,无法知道参数的类型是什么。它们都是字符串。

如果您使用 JSON 作为传输编码,则可以发送整数,因为 JSON 知道字符串、整数和列表等。

$.ajax({
    url: '@Url.Action("PlantHistoryContent", "PlantStatus")',
    data: { data: JSON.stringify({ ids: [ 1, 2, 3, 4 ] }) },
    async: false,
    type: "POST"
})

现在您的请求正文如下所示:

data=%5B1%2C2%2C3%2C4%5D

0
投票

对于那些可能会像上面一样寻找相同问题的人 如果您仍然无法从其他答案中找到任何想法。我遇到了同样的问题,这是我的解决方案:只需简单地将 [FroomBody] 添加到控制器操作

    public void PlantHistoryContent([FromBody]List<int> id) { // }

© www.soinside.com 2019 - 2024. All rights reserved.