我正在使用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添加了多少个文件框的递增数。
我已经使用了fiddler和firebug,我可以肯定地看到文件正在请求中发送,这也通过在服务器上查看Request.Files [0](当发送1个单个文件时)来确认内容和文件名。
当我查看Files属性时,它看起来如下所示:
所以看起来文件集合由于某种原因填充了空对象而不是实际的文件数据,这很奇怪。我认为如果模型绑定不起作用,整个Files集合将为null而不是其中的第一项。
关于这里发生的任何想法?
修改 我也尝试将这些文件作为动作方法中的参数(实际上是以这种方式启动),尝试更改文件输入名称的情况,这两种情况都没有效果。
编辑2: 它似乎在IE中提交,但在firefox或chrome
中没有编辑3: 似乎在FireFox / Chome中,X-Requested-With标头与“XMLHttpRequest”一起发送。我怀疑我们正在使用的ajaxform插件正在进行一些时髦的事情而且它没有创建它的iframe来正确地提交提交
编辑4: 我在一个单独的项目中复制了大部分代码,这一切似乎都有效,不知道为什么它不会在这种情况下一定是奇怪的事情。我唯一能够追踪到的是,任何不支持xmlhttprequest级别2的浏览器似乎都会导致文件被正确绑定。