2016-06-24 2 views
2

Я использую библиотеку 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?

+0

Попробуйте указать те же идентификаторы и имена, что и ваш образец модели, на страницу HTML, а затем отметьте –

+0

. Вы не можете отправлять файлы с помощью 'jquery.unobtrusive-ajax'. Вы можете использовать методы jQuery '.ajax()' вместе с 'FormData', как описано в [этом ответе] (http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model -в-FormData-и-получить-это-в-MVC/29293681 # 29293681) –

ответ

1

1 Комментарий пользователя Per Stephen, jquery.unobtrusive-ajax не могут быть использованы для отправки файлов. Вместо этого для достижения этой цели следует использовать метод jQuery .ajax() и FormData.

Для получения дополнительной информации см. Stephen's answer on another question.