【问题标题】:Pass javascript array to c# array/list using $.post without specifing datatype as json使用 $.post 将 javascript 数组传递给 c# arraylist 而不将数据类型指定为 json
【发布时间】:2018-09-04 08:16:58
【问题描述】:

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

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

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

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

现在我正在 javascript 中构建一个 VehicleKeys 数组,如下所示

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 控制器有一个方法可以接受来自 javascript 的多个 Vehicles 和多个 VehicleKeys

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

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

任何帮助将不胜感激。

【问题讨论】:

  • 指定绑定类型(frombody) c# side
  • vehicles 参数仍然显示计数为 0。
  • 你能显示你的json值吗
  • "{"vehicles":[{"VehicleKey":"10"},{"VehicleKey":"11"}]}".
  • 你的 json 格式是错误的,我认为 $.post 没有将 Content-Type 发布为 json。

标签: javascript c# model-view-controller


【解决方案1】:

$.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
        }

【讨论】:

    【解决方案2】:

    我曾经使用过类似的方法,但使用了 ajax,它是这样的:

    直接使用类中的属性作为对象 { } 填充您的数组,确保名称完全相同:

          function GetVehicleDetails(inputarray) {
            var data_Temp = [];
            for (var i = 0; i < inputarray.length; i++) {
            var _vehiclekey = inputarray[i].VehicleKey ? inputarray[i].VehicleKey : null;
            data_Temp.push({ VehicleKey : _vehiclekey });
            });
            return data_Temp;
           }
    
          var objectToSend = GetVehicleDetails(selectedVehicles);
          var JsonData = JSON.stringify({ vehicles: objectToSend });
            $.ajax({
              type: "POST",
              contentType: "application/json",
              url: "/controllerName/actionName", //in asp.net using mvc ActionResult
              datatype: 'json',
              data: JsonData,
              success: function (response) {
              },
              error: function (response) {
                     console.log(response);
               }
          });
    

    控制器中的 ActionResult 应该是这样的:

        [HttpPost]
        public ActionResult Create(List<Vehicle> vehicles)
        {
         //do whatever you want with the class data
        }
    

    我不知道这是否对你有帮助,但这总是对我有用,我希望它有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 2013-05-25
      • 2013-02-03
      • 1970-01-01
      • 2011-07-10
      相关资源
      最近更新 更多