首页 > 解决方案 > 使用 $.post 将 javascript 数组传递给 c# 数组/列表,而不将数据类型指定为 json

问题描述

我有一个用javascript创建的模型如下

function Vehicle() {
    this.type = 'Vehicle';
    this.data = {
        VehicleKey: null
    }
};

我在 c# 中创建了一个类似的模型,如下所示

public class Vehicle
{
    public string VehicleKey { get; set; }
}

现在我正在构建一个VehicleKeysjavascript数组,如下所示

function GetVehicleDetails(inputarray) {

    var vehicleKeys = [];

    for (var i = 0; i < inputarray.length; i++) {
        var vehicleObject = new Vehicle();
        vehicleObject.data.VehicleKey = inputarray[i].VehicleKey ? inputarray[i].VehicleKey : null;
        vehicleKey.push(vehicleObject.data);
     }
    return vehicleKeys ;
}

我打电话$.post(url, data)如下

var objectToSend = GetVehicleDetails(selectedVehicles);

 var data = JSON.stringify({
     'vehicles': objectToSend
 });

 $.post(url, data)
     .done(function (result) {
          if (result) {
               download(result, 'VehicleReport.xlsx', { type: 'application/octet-stream' });
               console.log("Report created successfully");
           }
           else {
               console.log("Error creating report");
           }
      }).fail(function (error) {
               console.log("Error creating report.");
  });

MVC 控制器有一种方法可以接受来自 javascriptVehicles的多个VehicleKeys

public byte[] CreateVehicleReport(List<Vehicle> vehicles)
{
    //Generation of report and pass it back to javascript
}

在这里,我可以将 javascript 中的数据作为 10 和 11 提交,Vehicles但是当它捕获 c# 时,计数为 0。

任何帮助将不胜感激。

标签: javascriptc#model-view-controller

解决方案


$.post 未发布 Content-Type json 数据,因此您需要使用 $.ajax

    function GetVehicleDetails(inputarray) {
          var vehicleKeys = [];
          for (var i = 0; i < inputarray.length; i++) {
               var vehicleObject = {};  // Set Object 
               vehicleObject.VehicleKey = inputarray[i].VehicleKey ? inputarray[i].VehicleKey : null;
                 vehicleKeys.push(vehicleObject);
                }
             return vehicleKeys;
          }

     var objectToSend = GetVehicleDetails(selectedVehicles);

       $.ajax({ type: 'POST',
                 url: url,
                  data: JSON.stringify(objectToSend),
                  contentType: "application/json",
                   dataType: 'json',
                    success: function (data) {
                        alert('data: ' + data);
                    },
                }).done(function () {
                    if (result) {
                        console.log("Report created successfully");
                    }
                    else {
                        console.log("Error creating report");
                    }
                }).fail(function () {
                    console.log("Error creating report.");
                });

C# 方法

[HttpPost("CreateVehicleReport")]
        public byte[] CreateVehicleReport([FromBody]List<Vehicle> vehicles)
        {
            return null;
            //Generation of report and pass it back to javascript
        }

推荐阅读