Я пытаюсь опубликовать вложенную модель просмотра, которая имеет List<IFormFile>
, используя сообщение jquery AJAX, однако свойство IFormFile всегда имеет значение null в модели.
Вот моя вложенная модель (IFormFile
находится внутри ChildModel):
public class ParentViewModel
{
public string ParentName{ get; set; }
public ChildModel Child{ get; set; }
}
Класс ChildModel:
public class ChildModel
{
public string ChildName{ get; set; }
public IList<IFormFile> Images{ get; set; }
}
Метод контроллера:
[HttpPost]
public async Task<bool> CompleteAppointment(ParentViewModel viewModel)
{
// save logic
return true;
}
Просмотр (это частичный Здесь нет формы, необходимо передать документы на ajax звонок):
@model SomeOtherViewModel
<div class="row">
//controls using SomeOtherViewModel
</div>
<div class="row">
<div class="col-md-6">
<div>
<span class="font-weight-bold">Child Name</span><br />
<div class="pt-2 pb-2"><input id="name" type="text" class="form-control" /></div>
<input type="file" id="images" multiple />
</div>
</div>
</div>
JavaScript Код:
function save(){
var formData = new FormData();
formData.append("ParentName", "Anne");
formData.append("Child[ChildName]", "Sam");
var files = $("#images").get(0).files;
for (var i= 0; i< files.length; i++) {
formData.append("Child[Images]", files[i]);
}
$.ajax({
url: "FamilyController/Save",
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function (data) {}
);
}
viewModel.ChildModel.Images
всегда равен нулю. Я пробовал formData.append("Child[Images][i]", files[i]);
, добавлял IFormFile
в класс-оболочку, затем использовал его в дочернем элементе и несколько других вариантов. Но ни один из них не работает.
Однако, если я добавляю public IList<IFormFile> Images{ get; set; }
к ParentViewModel
и добавляю formData.append("Images", files[i]);
, файлы становятся доступными в контроллере.
Что мне здесь не хватает ? Я очень ценю любую помощь.