2

我正在使用 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 的浏览器似乎都会导致文件正确绑定。

4

0 回答 0