ASP.NET MVC3从部分视图上载文件(并填充模型中的相应字段)

我知道这个问题已经在SO和其他地方讨论过了 ,但是我找不到任何问题的答案。

我正在开发一个ASP.NET MVC3项目,我想创建一个包含FileUploadPartial视图 。 这个局部视图在基本的Create页面上调用,我希望上传的文件属于要创建的模型。 只有当用户提交表单时,才会上传所选文件。

以下是代码的解释:

Model ModelToCreate

 public class ModelToCreate { //Some properties public FileUploadModel Files { get; set; } } 

模型FileUploadModel

 public class FileUploadModel { public IEnumerable Files { get; set; } } 

我的PartialView(_UploadFiles.cshtml)

 @model Models.ModelToCreate //I tried with Html.BeginForm(Create, MyController instead of null, null, but with no result. @using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.TextBoxFor(m => m.Files, new { type = "file", name = "Files" }) } 

如何调用局部视图(通过Create.cshtml)

 @Html.Partial("_UploadFiles") 

我也试过@Html.Partial("_UploadFiles", Model) ,但没有结果……

当我单击Create.cshtmlSubmit按钮时,表单将提交给我的控制器BUT Files字段始终为null而其他数据是OK。

我错过了什么吗? 你能指出我的位置(为什么?)
谢谢 !

更新(和解决方案)

这里有一些我忘记了Create.cshtml的附加信息表单如下所示:

 @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "target-form" })) { // Some fields, Textboxes and others CheckBoxes //Call to partial View } 

当我看一下生成的源代码时,我在

标签中看到了局部视图…所以我在中有一个 ,这是非法的并且“被忽略”。 这导致了问题

解决方案只需将此标记添加到Create.cshtml的Create.cshtml

 @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "target-form", enctype = "multipart/form-data" })) 

并将我的部分视图称为

 @Html.Partial("_UploadFiles", Model) 

好的,这将使它适合你。

Create.cshtml视图(将表单和提交移到局部之外)

 @using(Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.Partial("_UploadFiles", Model)  } 

_UploadFiles.cshtml视图

 @model ModelToCreate @Html.TextBoxFor(m => m.Files.Files, new { type = "file", name = "Files" }) 

模型(更改为List并注意FileUploadModel构造函数中的初始化程序)。

 public class ModelToCreate { //Some properties public FileUploadModel Files { get; set; } } public class FileUploadModel { public FileUploadModel() { Files = new List(); } public List Files { get; set; } } 

控制器动作:

 public ActionResult Create() { var model = new ModelToCreate(); return View(model); } [HttpPost] public ActionResult Create(ModelToCreate model) { var file = model.Files.Files[0]; return View(model); } 

在此处输入图像描述