Я пытаюсь загрузить файл через JQuery Ajax в приложение ASP.NET Core MVC.
HttpPostedFileBase
всегда null
. Когда я помещаю его в качестве параметра непосредственно в действие, я получаю ошибку привязки к модели.
Javascript:
$(document).on('click', '#attachItemBtn', function () {
var attachItemFiles = document.getElementById('attachItemFile');
var formData = new FormData();
formData.append("Document", attachItemFiles.files[0]);
formData.append("Id", 1234);
formData.append("FileName", "test");
$.ajax({
cache: false,
type: "POST",
data: formData,
processData: false,
contentType: 'multipart/form-data',
url: App.Urls.AddAttachment,
success: function (data) {
App.Messages.showErrorMessage('Item attached');
},
error: function (xhr, ajaxOptions, thrownError) {
App.Messages.showErrorMessage('Error Occured While attaching document');
}
});
var debug = 0;
});
Действие:
[HttpPost]
public IActionResult AddAttachment(AttachmentItemModel model)
{
var count = HttpContext.Request.Form.Files.Count;
int i = 0;
return Json("done");
}
Модель:
public class AttachmentItemModel
{
public int Id { get; set; }
public HttpPostedFileBase Document { get; set; }
public string FileName { get; set; }
}
Приведенный выше код работает с HttpContext.Request.Form.Files
, но model.Document
это null
Когда я переписываю действие в приведенную ниже сигнатуру функции, я получаю сообщение об ошибке:
public IActionResult AddAttachment(int Id, string FileName, System.Web.HttpPostedFileBase Document)
Затем я получаю следующую ошибку:
При обработке запроса возникло необработанное исключение. InvalidOperationException: не удалось создать экземпляр типа System.Web.HttpPostedFileBase. Сложные типы, привязанные к модели, не должны быть абстрактными или типами значений и должны иметь конструктор без параметров.
Что мне не хватает? Я бы предпочел, чтобы файлы были привязаны к моей модели вместо использования HttpContext.Request.Files
.