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

时间:2018-03-22 17:16:33

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

在我的引导数据表中选择了一行时,我建立了一个数组。然后我需要将这个从我的视图传递给控制器​​,控制器将启动局部视图。但是,当我执行代码时,我的控制器中出现空引用异常。控制器中的代码只是实际使用的占位符,但是显示我打算在加载数组时循环它。关于为什么它会显示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 个答案:

答案 0 :(得分:2)

您必须使用JSON.stringify({ orders: completeArray }),您的C#代码将使用其参数映射您的数组。

答案 1 :(得分:1)

您需要添加traditional: true ajax选项以将数组回发到该集合。

$.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) {
        ....
    }
})