【问题标题】:Can I pass two arrays through Ajax to controller. (File Array and Int Array)我可以通过 Ajax 将两个数组传递给控制器​​吗? (文件数组和整数数组)
【发布时间】: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() 方法,但显示超出最大调用堆栈大小的错误。

有人可以帮忙吗?

【问题讨论】:

    标签: jquery arrays ajax model-view-controller


    【解决方案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 中有数据,但在控制器中仍然为空。
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多