Как отправить массив объекта, имеющего файл с ajax на asp. net MVC контроллер? - PullRequest
0 голосов
/ 24 марта 2020

Data uploader grid

Я пытался отправить несколько строк с одним файлом в каждой строке (см. Изображение выше) на мой MVC контроллер с ajax. JavaScript code-

var formData = new FormData();
$('#assFileTable tbody tr').each(function (index, item) {
    var tr = $(this);
    var description = tr.find('.dTableDescription').val();
    var docType = tr.find('.dTableDocType').val();
    var attachment = $('#row-' + index + '-Attachment').get(0).files[0];

    var assoFile = {
        Description: description,
        DocTypeId: docType,
        Attachment: attachment
    };
    formData.append('assoFiles', assoFile);
});

var request = new Request('/Setting/SaveAssociatedFiles/', {
        method: 'POST',
        body: formData
});
fetch(request).then(response => console.log(response.json()));

Метод контроллера-

public ActionResult SaveAssociatedFiles(List<TaskAssociatedFileViewModel> assoFiles)
{            
}

Модель-

public class TaskAssociatedFileViewModel
{
    public string Description { get; set; }
    public int DocTypeId { get; set; }
    public string FilePath { get; set; }
    public HttpPostedFileBase Attachment { get; set; }
}

Метод контроллера вызывается, но вместо отправленных данных получает нулевое значение. Я что-то упустил или я должен делать разные вещи?

1 Ответ

0 голосов
/ 24 марта 2020

Насколько я понял, вы просто отправляете одну последнюю строку таблицы в assoFiles ключ

var formData = new FormData();
let allDataArray = [];
    $('#assFileTable tbody tr').each(function (index, item) {
        var tr = $(this);
        var description = $(this).find('.dTableDescription').val();
        var docType = $(this).find('.dTableDocType').val();
        var attachment = $('#row-' + index + '-Attachment').get(0).files[0];

        var assoFile = {
            Description: description,
            DocTypeId: docType,
            Attachment: attachment
        };
        allDataArray.push(assoFile)

    });
    formData.append('assoFiles', allDataArray);
    var request = new Request('/Setting/SaveAssociatedFiles/', {
            method: 'POST',
            body: formData
    });
    fetch(request).then(response => console.log(response.json()));
  1. Создать пустой массив

    let allData = []

  2. Добавить assoFile в пустой массив formData

    allData.pu sh (assoFile)

  3. formData.append('assoFiles', allData);

...