我正在使用 mvc 4 并尝试将多个文件作为模型的一部分提交。
我的表格看起来像这样
<% using (Html.BeginForm("Edit", "Issue",FormMethod.Post, new {id = "issueForm", encType="multipart/form-data"})) %>
呈现
<form id="issueForm" method="post" enctype="multipart/form-data" action="/Issue/Edit">
我的动作如下
[Authorize]
[HttpPost]
public ActionResult Edit(IssueViewModel viewmodel)
并且视图模型上有一个属性
public IEnumerable<HttpPostedFileBase> Files { get; set; }
该表单包含如下文件的输入:
<input id="filesX" type="file" name="Files">
其中 X 是通过 javascript 添加了多少文件框的递增数。
我使用了提琴手和萤火虫,我可以明确地看到文件正在请求中发送,这也可以通过查看服务器上的 Request.Files[0] (发送 1 个单个文件时)来确认,因为它显示了内容和文件名。
当我查看 Files 属性时,它如下所示:
因此,出于某种原因,文件集合似乎填充了空对象,而不是实际的文件数据,这很奇怪。我认为如果模型绑定不起作用,则整个 Files 集合将为空,而不是其中的第一项。
关于这里发生了什么的任何想法?
编辑: 我还尝试将文件作为操作方法中的参数(实际上是这样开始的),尝试更改文件输入名称的大小写,这两者都没有效果。
编辑 2: 它似乎在 IE 中提交很好,但在 firefox 或 chrome 中没有
编辑 3: 似乎在 FireFox/Chome 中 X-Requested-With 标头与“XMLHttpRequest”一起发送。我怀疑我们正在使用的 ajaxform 插件发生了一些奇怪的事情,并且它没有创建它的 iframe 来正确提交
编辑 4: 我已经在一个单独的项目中复制了大部分代码,这一切似乎都有效,不知道为什么在这种情况下它不会发生一定是奇怪的事情。我能够追踪的唯一一件事是任何不支持 xmlhttprequest 级别 2 的浏览器似乎都会导致文件正确绑定。