Как отправить объект данных, которые содержат загружаемые файлы и строки в контроллер с помощью ajax? - PullRequest
1 голос
/ 06 мая 2019

Я отправляю массив объектов, которые содержат данные загружаемого файла и некоторые строковые значения, на мой контроллер, используя 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 в моем модальном классе.

1 Ответ

0 голосов
/ 06 мая 2019
 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...