Я использую библиотеку jquery-ajax-unobtrusive для добавления в previously existing tag helpers для быстрого создания формы, которая отправляется через запрос ajax.Форма представления Ajax с файлами в ASP.NET MVC 6
Это дает мне что-то вроде этого:
<form id="person-create" enctype="multipart/form-data" asp-controller="Person" asp-action="Create" asp-route-id="1" data-ajax="true" data-ajax-method="POST" role="form">
<!-- There are other inputs for the other items. -->
<input id="photo-upload" asp-for="Photo" type="file">
</form>
Форма представляет большой, за исключением того, что входной файл, который я имею в форме всегда приходит через с нулевым значением. В качестве теста я вернул форму обратно, чтобы не использовать ajax, и все подчиняется должным образом. Я также попытался вручную выполнить представление, вызвав функцию jQuery .ajax
напрямую, но это также испытало ту же проблему, что и использование jquery-ajax-unobtrusive.
Мой контроллер конечных точек выглядит следующим образом:
public async Task<IActionResult> Create(int id, PersonViewModel person)
{
// Do stuff...
}
И в PersonViewModel, у меня есть класс, который выглядит примерно так:
public class PersonViewModel
{
public int PersonId { get; set; }
public string Name { get; set; }
public IFormFile Photo { get; set; }
}
я просто отсутствует что-то очевидное, или есть что-то по сути, разные при отправке файла через форму Ajax?
Попробуйте указать те же идентификаторы и имена, что и ваш образец модели, на страницу HTML, а затем отметьте –
. Вы не можете отправлять файлы с помощью 'jquery.unobtrusive-ajax'. Вы можете использовать методы jQuery '.ajax()' вместе с 'FormData', как описано в [этом ответе] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model -в-FormData-и-получить-это-в-MVC/29293681 # 29293681) –