我知道这个话题已经讨论过 https://stackoverflow.com/questions/13788372/asp-net-mvc-ajax-file-upload-with-partialviews在 SO 和其他地方,但我找不到我的问题的任何答案。
我正在开发一个 ASP.NET MVC3 项目,我想创建一个局部视图含有一个FileUpload
。该部分视图称为基本视图Create
页面,我希望要上传的文件属于要创建的模型。仅当用户提交表单时,才会上传所选文件。
这是代码的解释:
Model ModelToCreate
public class ModelToCreate
{
//Some properties
public FileUploadModel Files { get; set; }
}
Model FileUploadModel
public class FileUploadModel
{
public IEnumerable<HttpPostedFileBase> 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)
,但没有结果...
当我点击Submit
按钮进入Create.cshtml
,表单已提交给我的控制器但是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
}
当我查看生成的源代码时,我看到了部分视图<form>
标签...所以我有一个<tag>
in a <tag>
,这是非法的并且被“忽略”。这会导致问题
SOLUTION只需将此标签添加到 BeginForm 中即可Create.cshtml
:
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "target-form", enctype = "multipart/form-data" }))
并将我的部分视图称为
@Html.Partial("_UploadFiles", Model)