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

问题描述

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

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

jQuery/查看代码:

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;
  }

我希望在我的控制器中接收带有上传文件的数据。我已经在我的模态类中声明了 HttpPostedFileBase。

标签: c#jqueryajaxasp.net-mvcasp.net-ajax

解决方案


 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;
  }

推荐阅读