从ajax函数传递字符串数组到mvc控制器

3
我有一个数组,当在我的Bootstrap数据表格中选择一行时,我会构建这个数组。然后我需要将它从我的视图传递给控制器,该控制器将启动一个部分视图。然而,当我执行代码时,在我的控制器中出现空引用异常。控制器中的代码只是一个占位符,用于显示我打算在加载数组时循环使用。你们有什么想法为什么它会显示NULL,即使我可以在调试中看到它有值。
AJAX:
function MoveSelected() {
    $.ajax({
        type: "Get",
        url: '@Url.Action("MoveSelectedRoute", "Transport")',
        data: { orders: completeArray },
        success: function (data) {
            $('#detail_MoveSelectedOrders').html(data);
            $('#modalMoveSelectedOrders').modal('show');
        }
    })
}

控制器:

public ActionResult MoveSelectedRoute(string[] orders)
{
    string OrdersToMove = string.Empty;
    foreach (string row in orders)
    {
        string orderNo = orders.ToString().PadLeft(10, '0');
        if (OrdersToMove == string.Empty)
        {
            OrdersToMove = orderNo;
        }
        else
            OrdersToMove = OrdersToMove + "," + orderNo;
    }
}

2
你没有展示completeArray是什么!但是假设它是一个字符串数组,例如 [ "a", 'b', 'c' ],那么你需要添加traditional: true,的 ajax 选项。 - user3559349
或者你需要 data: JSON.stringify({ orders: completeArray }),contentType: 'application/json; charset=utf-8', - user3559349
很不幸,这些方法都没有起作用,它只是一个字符串数组。 - undefined
我给你的两个选项都可以使用! - user3559349
1
Stephen,我误读了你给出的选项并将它们结合在一起。stringify没有起作用,但是traditional: true,起了作用。如果你把这个作为答案,我会标记它。谢谢。 - undefined
刚刚注意到你正在进行GET请求(第二个选项只适用于POST请求)。 - user3559349
2个回答

4

您需要在Ajax选项中添加traditional: true,以将数组提交到集合。

$.ajax({
    type: "Get",
    url: '@Url.Action("MoveSelectedRoute", "Transport")',
    data: { orders: completeArray },
    traditional true,
    success: function (data) {
        ....
    }
})

请注意,traditional: true选项仅适用于简单数组。
另一种方法是将数据序列化为字符串,设置内容类型为application/json,并进行POST而不是GET请求。
$.ajax({
    type: "Get",
    url: '@Url.Action("MoveSelectedRoute", "Transport")',
    data: JSON.stringify({ orders: completeArray }),
    contentType: "application/json; charset=utf-8"
    success: function (data) {
        ....
    }
})

最后一种选择是使用集合索引器生成并发送值。
var data = {
    orders[0] = 'abc',
    orders[1] = 'xyz',
    orders[2] = '...'
}
$.ajax({
    type: "Get",
    url: '@Url.Action("MoveSelectedRoute", "Transport")',
    data: data,
    success: function (data) {
        ....
    }
})

2

您需要使用 JSON.stringify({ orders: completeArray }),然后您的C#代码将会映射您的参数和数组。


当我添加了stringify之后,不幸的是控制器仍然接收到一个null值。 - undefined
你可以尝试将 "string[]" 替换为 "List<string>" - undefined
还要将这些属性添加到你的ajax调用中: contentType: "application/json; charset=utf-8", dataType: "json" - undefined
我尝试过这些方法,但不幸的是,它们都没有起作用。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接