我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)

Posted

技术标签:

【中文标题】我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)【英文标题】:Can I pass two arrays through Ajax to controller. (File Array and Int Array) 【发布时间】:2021-05-17 02:42:17 【问题描述】:

我正在使用以下代码来收集数据和 Ajax 调用:

            var childArr = [];
            var File_Arr = [];
            File_Arr = $('#File_Arr');
            console.log($.type(File_Arr));
            $('#File_Arr').each(function () 
                File_Arr.push($(this).val());
            );
            //File_Arr = $("#File_Arr").val();
            var children = $('#file-container table').children('tbody');
            var test1 = [1, 2, 3, 4];
            var test2 = [5, 6, 7, 8];
            $(children).each(function (index, item) 
                var count = $(item).children().length - 1;
                childArr.push(count);
            );
            $.ajax(
                url: "@Url.Content("~/Search_Replace_/UploadFile")",
                type: "POST",
                data: 'tableRowCount':childArr,'File_Arr':File_Arr,
                dataType: "json",
                contentType: "application/json",
                charset: "utf-8",
                success: function (msg) 
                    console.log('Success!');
                
            );

我在控制器中使用以下代码来捕获两个数组:

[HttpPost]
    public ActionResult UploadFile(int[] tableRowCount, HttpPostedFileBase[] File_Arr)
    

但在这里我只能正确获取File_Arr,而tableRowCount 将作为null 来。

请注意:我也尝试过JSON.stringify() 方法,但显示超出最大调用堆栈大小的错误。

有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

您可以使用表单数据来发送带有数据的文件。试试这个:

    var childArr = [];

    var fileUploadControl = $('#File_Arr').get(0);

    var files = fileUploadControl.files;

    var formData = new FormData();

    for (var i = 0; i < files.length; i++) 
        formData.append('File_Arr', files[i]);
    

    var children = $('#file-container table').children('tbody');
    var test1 = [1, 2, 3, 4];
    var test2 = [5, 6, 7, 8];
    $(children).each(function (index, item) 
        var count = $(item).children().length - 1;
        childArr.push(count);
    );

    for (var i = 0; i < childArr.length; i++) 
        formData.append('tableRowCount', childArr[i]);
    


    $.ajax(
        url: "@Url.Content("~/Search_Replace_/UploadFile")",
        type : "POST",
        data: formData,
        processData: false,
        contentType: false,
        success: function (msg) 
            console.log('Success!');
        
    );

【讨论】:

嗨,你能告诉我如何在控制器中访问这些数据吗? 使用您在控制器中编写的相同代码。没有变化! 我试图访问它,但 tableRowCount 在控制器中仍然为空。我是否必须使用 Request['tableRowCount'] 才能在控制器中访问它? 检查你的childArr是否有数据。是的,您可以从 Request 对象中访问它,但是我们不需要在操作方法中指定参数。 我在 jquery 中使用调试器检查过,childArr 中有数据,但在控制器中仍然为空。

以上是关于我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ajax 传递 from.serialize() 和数组值?

通过 AJAX 将数组传递给 mvc Action

将数组从ajax调用传递给控制器​​,控制器中的数组为空

将c#集合序列化为视图中的jquery数组以通过ajax方法传递给控制器

将数组数组从 Ajax 传递给控制器

如何使用 Ajax 调用 MVC4 传递两个字符串数组