Невозможно отправить список объектов, содержащих файл, в контроллер - PullRequest
0 голосов
/ 30 апреля 2019

Я пытаюсь отправить список объектов из моего представления в контроллер.Каждый объект имеет файл вместе с некоторыми другими свойствами.Вот модель:

public class FilesUploadModel
    {
        public HttpPostedFileBase file { get; set; }
        public string fileTaskId { get; set; }
        public bool upload { get; set; }
        public bool read { get; set; }
        public bool import { get; set; }
        public bool isReupload { get; set; }
        public int fileReadId { get; set; }
    }

Контроллер:

public ActionResult FileSave(List<FilesUploadModel> models)
        {}

И вот как я пытаюсь отправить список на контроллер:

var filesUploadModel = [];
function someFn(){
   var uploadModel = {
                        file = someInput.files[0]
                        fileTaskId: "2563",
                        upload: true,
                        read: true,
                        import: true,
                        isReupload: false,
                        fileReadId: 0
                    }
                    filesUploadModel.push(uploadModel);
}
function UploadFiles(){
        var formData = new FormData();

          filesUploadModel.forEach(function (model) {  //filesUploadModel is the list 
            formData.append('models', model);
          });

        $.ajax({
            url: "/Company/FileSave",
            type: 'POST',
            enctype: 'multipart/form-data',
            processData: false,
            contentType: false,
            data: formData,
            complete: function (data) {

            }
        });
    }

Но яЯ не могу получить данные в контроллере.Не могу выяснить проблему здесь.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Я наконец нашел проблему. Поскольку мы пытаемся передать коллекцию объектов, нам нужно добавить каждый из них с индексом:

    filesUploadModel.forEach(function (model, i) {
        formData.append('models[' + i + '].file', model.file);
        formData.append('models[' + i + '].fileTaskId', model.fileTaskId);
        formData.append('models[' + i + '].upload', model.upload);
        formData.append('models[' + i + '].read', model.read);
        formData.append('models[' + i + '].import', model.import);
        formData.append('models[' + i + '].isReupload', model.isReupload);
        formData.append('models[' + i + '].fileReadId', model.fileReadId);
    });
0 голосов
/ 30 апреля 2019

Вы не отправляете список файлов, но вместо этого вместо объекта со списком файлов измените свое действие, чтобы получить объект со свойством списка файлов

public ActionResult FileSave(FileSaveRequest request)
{

}


public class FileSaveRequest{

 public List<FilesUploadModel> Models { get;set; }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...