Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays AJAX Post JSON对象的大数组返回NULL_Arrays_Json_Ajax_Asp.net Mvc_Asp.net Ajax - Fatal编程技术网

Arrays AJAX Post JSON对象的大数组返回NULL

Arrays AJAX Post JSON对象的大数组返回NULL,arrays,json,ajax,asp.net-mvc,asp.net-ajax,Arrays,Json,Ajax,Asp.net Mvc,Asp.net Ajax,我试图在控制器上从JSON对象数组生成一个excel文件。我只传递过一个JSON对象,我使用的方法似乎不适用于列表或JSON数组 AJAX生成对象: $.ajax({ type: "GET", url: '/home/GetInfoToExportCalgary', success: function (data) { //console.log(data); CalgaryBookingIn

我试图在控制器上从JSON对象数组生成一个excel文件。我只传递过一个JSON对象,我使用的方法似乎不适用于列表或JSON数组

AJAX生成对象:

    $.ajax({
        type: "GET",
        url: '/home/GetInfoToExportCalgary',
        success: function (data) {
            //console.log(data);
            CalgaryBookingInfo = data;

            for (var i = 0; i < CalgaryBookingInfo.length; i++) {
                if (CalgaryBookingInfo[i].length != 0) {
                    //console.log(CalgaryBookingInfo[i][0].Company + " has bookings")

                    var SumTime = 0;
                    for (var j = 0; j < CalgaryBookingInfo[i].length; j++)
                    {
                        CalgaryNotNullBookings.push({
                            Company: CalgaryBookingInfo[i][j].Company,
                            Location: CalgaryBookingInfo[i][j].Location,
                            PaidHours: CalgaryBookingInfo[i][j].HoursPaid,
                            Start: CalgaryBookingInfo[i][j].Start,
                            End: CalgaryBookingInfo[i][j].End,
                            Time: CalgaryBookingInfo[i][j].Time,
                            Total: SumTime + CalgaryBookingInfo[i][j].Time
                        });
                        SumTime += CalgaryBookingInfo[i][j].Time;
                    }

                    CalgaryNotNullBookings.push({
                        Company: "",
                        Location: "",
                        PaidHours: "",
                        Start: "",
                        End: "",
                        Time: "",
                        Total: SumTime
                    });
                }
            }
            console.log(CalgaryNotNullBookings);
            //buildHtmlTable(RetreivedClients);
        }
    })
控制员职务职能:

[HttpPost]
public JsonResult ExportCalgary(List<ClientBookingInfo> e)
{
    var status = false;

    //string[] columns = { "Company", "Location", "PaidHours", "Start", "End", "Time" , "Total" };
    //byte[] filecontent = ExcelExportHelper.ExportExcel(dataToConvert, "Technology", true, columns);
    //return File(filecontent, ExcelExportHelper.ExcelContentType, "CalgaryClientInfo_" + DateTime.Now.Year+"_" + DateTime.Now.Month + ".xlsx");

    ExcelPackage excel = new ExcelPackage();
    var workSheet = excel.Workbook.Worksheets.Add("Sheet1");
    workSheet.TabColor = System.Drawing.Color.Black;
    workSheet.DefaultRowHeight = 12;
    //Header of table  
    //  
    workSheet.Row(1).Height = 20;
    workSheet.Row(1).Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
    workSheet.Row(1).Style.Font.Bold = true;
    workSheet.Cells[1, 1].Value = "Company";
    workSheet.Cells[1, 2].Value = "Location";
    workSheet.Cells[1, 3].Value = "PaidHours";
    workSheet.Cells[1, 4].Value = "Start";
    workSheet.Cells[1, 5].Value = "End";
    workSheet.Cells[1, 6].Value = "Time";
    workSheet.Cells[1, 7].Value = "Total";
    //Body of table  
    //  
    int recordIndex = 2;
    for(int i = 0; i < e.Count; i++)
    { 
        workSheet.Cells[recordIndex, 1].Value = e[i].Company;
        workSheet.Cells[recordIndex, 2].Value = e[i].Location;
        workSheet.Cells[recordIndex, 3].Value = e[i].PaidHours;
        workSheet.Cells[recordIndex, 4].Value = e[i].Start;
        workSheet.Cells[recordIndex, 5].Value = e[i].End;
        workSheet.Cells[recordIndex, 6].Value = e[i].Time;
        workSheet.Cells[recordIndex, 7].Value = e[i].Total;
        recordIndex++;
    }
    workSheet.Column(1).AutoFit();
    workSheet.Column(2).AutoFit();
    workSheet.Column(3).AutoFit();
    workSheet.Column(4).AutoFit();
    workSheet.Column(5).AutoFit();
    workSheet.Column(6).AutoFit();
    workSheet.Column(7).AutoFit();
    string excelName = "CalgaryClientInfo_" + DateTime.Now.Year+"_" + DateTime.Now.Month;
    using (var memoryStream = new MemoryStream())
    {
        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
        Response.AddHeader("content-disposition", "attachment; filename=" + excelName + ".xlsx");
        excel.SaveAs(memoryStream);
        memoryStream.WriteTo(Response.OutputStream);
        Response.Flush();
        Response.End();

        status = true;
    }



    return new JsonResult { Data = new { status = status } };
}

提前谢谢!:

发布复杂数据时,应发送对象的JSON字符串化版本,同时将contentType指定为application/JSON

您可以使用JSON.stringify方法将数组转换为相应的JSON字符串

var data = [];
data.push({ Company: "Microsoft", Location: "Redmond" , Total:123 });
data.push({ Company: "UrbanScience", Location:"Detroit", Total:456 });

$.ajax({
    type: "POST",
    url: '@Url.Action("ExportCalgary")',
    data: JSON.stringify(data),
    contentType: "application/json",
    success: function(data) {
        console.log("data :", data);
        // Do something with the response
    },
    error: function() {
        alert('Failed');
    }
});
现在,ModelBinder将能够正确地绑定来自ajax请求的数据,并且您的action方法参数中不会出现null

另一方面,通过ajax下载文件可能不起作用。考虑做一个正常的非Ajax表单提交给你的动作方法,它可以返回一个文件。另外,如果构建文件所需的数据在服务器代码中可用,比如说它在一个可以读取的db表中,我建议您将所需的最小数据(如uniqueId)发送到服务器,让服务器读取数据并使用此Id返回文件

若您可以将id传递给可以返回文件的操作方法,那个么您可以使用window.open方法从javascript调用它

或者将当前url设置为下载url

window.location.href = "/Documents/Download?id=2";

假设您有一个下载操作方法,它接受一个id参数并返回一个文件。

调用ExportCalgary方法时,数据参数中有什么?是否从操作方法返回文件?正在尝试通过ajax进行文件下载吗?不要尝试通过ajax下载文件。执行普通表单提交对于工作模型绑定的ajax调用,您应该将数组的字符串化版本与application/json一起作为contentTypedata:json.stringifydata,contentType:application/json发送,我传递给该方法的数据是CalgaryNotNullBookings[]在前面的ajax调用中我推送到的数组。我只是尝试将数据发送到我的控制器,然后控制器将为我生成excel文件downloading@Shyju我试过了,当我调试时,我的控制器上的列表仍然是空的:谢谢提示:并帮助解决发送问题!!
var data = [];
data.push({ Company: "Microsoft", Location: "Redmond" , Total:123 });
data.push({ Company: "UrbanScience", Location:"Detroit", Total:456 });

$.ajax({
    type: "POST",
    url: '@Url.Action("ExportCalgary")',
    data: JSON.stringify(data),
    contentType: "application/json",
    success: function(data) {
        console.log("data :", data);
        // Do something with the response
    },
    error: function() {
        alert('Failed');
    }
});
window.open("/Documents/Download?id=2");
window.location.href = "/Documents/Download?id=2";