【问题标题】:Passing a string array from an ajax function to mvc controller将字符串数组从 ajax 函数传递到 mvc 控制器
【发布时间】:2018-09-01 05:57:09
【问题描述】:

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

【问题讨论】:

  • 您还没有显示completeArray 是什么!但假设它是一个字符串数组,例如[ "a", 'b', 'c' ],那么你需要添加traditional: true, ajax 选项。
  • 或者你需要data: JSIN.stringify({ orders: completeArray }),contentType: 'application/json; charset=utf-8',
  • 不幸的是,这些都不起作用,它只是一个字符串数组
  • 我给你的两个选项都有效!
  • 斯蒂芬我误读了您提供的选项并将它们组合在一起。 stringify 不起作用,但 traditional: true, 起作用了。如果您将此作为答案,我会标记它。谢谢

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


【解决方案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) {
        ....
    }
})

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 当我添加 stringify 时,不幸的是它仍然通过控制器收到 null
    • 您可以尝试将“string[]”替换为“List
    • 还将这些属性添加到您的 ajax 调用中:contentType: "application/json; charset=utf-8", dataType: "json",
    • 我已经尝试了这些,但不幸的是它们都没有工作
    猜你喜欢
    • 2016-07-18
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多