使用ASP.NET MVC 6中的文件提交Ajax表单

时间:2016-06-24 17:02:35

标签: jquery ajax asp.net-mvc asp.net-core-1.0

我正在使用jquery-ajax-unobtrusive库添加previously existing tag helpers,以便快速创建通过ajax请求提交的表单。

这给了我这样的东西:

<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表单提交提交文件时是否存在一些本质上不同的东西?

1 个答案:

答案 0 :(得分:1)

根据Stephen的评论,jquery.unobtrusive-ajax不能用于提交文件。相反,应使用jQuery .ajax()方法和FormData来实现此目的。

有关详细信息,请参阅Stephen's answer on another question