如何使用 ajax 将包含上传文件和字符串的数据对象发送到控制器?

How to send data object which contain upload files and string to controller using ajax?

我正在使用 ajax 向我的控制器发送包含上传文件数据和一些字符串值的对象数组,但发送失败。

我也试过使用 formdata 但没有 luck.I 想知道我如何将数据发送到控制器。

Jquery/View代码:

function SaveBrandDetail() {
    debugger;
    var data = new Array();
    var tablecount = 0;        
    $(".DataRow").each(function () {
        tablecount = tablecount + 1;
        var row = {
            "SaleStartDateString": $(this).find(".clsSaleStartDateForVal").val(),
            "BrandDetailId": $(this).find(".clsBrandDetailId").val(),
            "SaleExpiryDateString": $(this).find(".clsSaleEndDateForVal").val(),
            "BrandId": $(this).find(".clsBrandId").val(),
            "Amount": $(this).find(".clsAmount").val(),
            "CategoryId": $(this).find(".clsSubCategoryId").val(),
            "ParentCategoryId": $(this).find(".clsParentCategoryId").val(),
            "fileUpload": $(this).find(".fileUploadData").get(0).files[0]

        };

        data.push(row);
    });    

        $.ajax({
            url: '@Url.Action("SaveData","Data")',
             type: "POST",
             dataType: 'json',
             contentType: 'application/json;',
             data: JSON.stringify(data),
             success: function (msg) {

             },
             error: function () {

             }
         });


}

控制器文件:

 public ActionResult SaveData(List<Data> data)
 {

        bool saved = false;
  }

我希望通过我的 controller.i 中的上传文件接收数据 已在我的模式 class 中声明 HttpPostedFileBase class。

 var formData = new FormData();
 $(".DataRow").each(function () {
        tablecount = tablecount + 1;
        var row = {
            "SaleStartDateString": $(this).find(".clsSaleStartDateForVal").val(),
            "BrandDetailId": $(this).find(".clsBrandDetailId").val(),
            "SaleExpiryDateString": $(this).find(".clsSaleEndDateForVal").val(),
            "BrandId": $(this).find(".clsBrandId").val(),
            "Amount": $(this).find(".clsAmount").val(),
            "CategoryId": $(this).find(".clsSubCategoryId").val(),
            "ParentCategoryId": $(this).find(".clsParentCategoryId").val(),
            "FileName": $(this).find(".fileUploadData").get(0).files[0].name
        };
        var file = $(this).find(".fileUploadData").get(0).files[0];
        formData.append(file.name, file);
        data.push(row);
    });    
    formData.append("data", JSON.stringify(data));
    $.ajax({
            url: '@Url.Action("SaveData","Data")',
             type: "POST",
             dataType: 'json',
             data: formdata,
             processData: false,
             contentType: false,
             success: function (msg) {

             },
             error: function () {

             }
         });


public ActionResult SaveData(string data)
 {
    var files = Request.Files;
    List<Data> d = JsonConvert.Deserialize<List<Data>>(data);
    foreach(var item in d)
    {
      var file = files[item.FileName];
    }
        bool saved = false;
  }