通过GET请求将二维javascript数组传递给Controller Action

时间:2016-03-03 19:04:07

标签: c# jquery asp.net-mvc

我在js函数中处理一些客户端数据,我需要将变量传递给控制器​​操作。这是我的功能:

function Save() {
        var matrixIds = [];

        //Do something

        //Then create the URL and pass the parameter
        document.location = "ConciliacionItem/DetallesConciliacionManual/" + $.param({ matriz : matrixIds });

到目前为止,我已尝试过几种方法,但我无法进入Controller Action。唯一可行的方法是使用像这样的Ajax调用:

setTimeout(function () {
        $.ajax({
            type: "POST",
            url: myUrl,
            data: JSON.stringify({
                matriz: matrixIds
            }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            traditional: true
        });
    }, 500);

如果我这样做,我有以下问题:我需要处理从该视图发送的数据,结果将转到另一个视图,如下所示:

public ActionResult DetallesConciliacionManual(int[][] matriz)
    {
        //Variable to process
        List<ConciliacionItem> listasAConciliar = new List<ConciliacionItem>();

        //Do a lot of things

        return View(listasAConciliar);
    }

所以,我需要做的是能够将我的函数的js变量传递给此操作,以继续应用程序工作流程。有可能吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以通过手动创建查询字符串来完成此操作:

function Save() {
    var matrixIds = [];

    //Do something

    //Then create the URL and pass the parameter
    document.location = "ConciliacionItem/DetallesConciliacionManual?" + createQueryString('matriz', matrixIds);
}

function createQueryString(sendName, items)
{
    var result = '';
    for (var i = 0; i < items.length; i++) {
        for (var j = 0; j < items[i].length; j++) {
            result += sendName + '[' + i + '][' + j + ']=' + items[i][j] + '&';
        }
    }

    return result;
}

所以你会得到一个像

这样的字符串
matriz[0][0]=0&matriz[0][1]=1&...

将成功解析为二维int数组,以便您进行操作

答案 1 :(得分:0)

您仍然可以使用ajax方法,然后在处理完数据后,您可能希望这样做:

public ActionResult DetallesConciliacionManual(int[][] matriz)
{
    //Variable to process
    List<ConciliacionItem> listasAConciliar = new List<ConciliacionItem>();

    //Do a lot of things

    //Returns another view.
    return RedirectToAction("Action", "Controller");
}

MSDN Reference