簡體   English   中英

使用$ .post將javascript數組傳遞給c#數組/列表,而無需將數據類型指定為json

[英]Pass javascript array to c# array/list using $.post without specifing datatype as json

我有一個用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控制器必須接受的方法VehiclesVehicleKeys從JavaScript來

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

在這里,我能夠以javascript的10和11格式提交Vehicles的數據,但是當它捕獲到c#時,計數為0。

任何幫助將不勝感激。

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

我曾經使用過類似的方法,但是使用了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
    }

我不知道這是否對您有幫助,但這始終對我有用,我希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM