我知道这个主题已经在SO和其他地方讨论过了,但是我找不到我的问题的答案。
我正在研究ASP.NET MVC3项目,并且我想创建一个包含的局部视图FileUpload
。在基本Create
页面上会调用此局部视图,我希望上传的文件属于要创建的模型。只有当用户提交表单时,所选文件才会被上传。
这是代码的解释:
模型 ModelToCreate
public class ModelToCreate
{
//Some properties
public FileUploadModel Files { get; set; }
}
模型 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
而其他数据都可以。
我想念什么吗?您能指出我的位置吗(为什么?)
谢谢!
更新(和解决方案)
这是一些我遗忘的其他信息,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>
在中有一个<tag>
,这是非法的并且被“忽略”。这导致了问题
解决方案:只需将此标签添加到以下对象的BeginForm中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)
<input type="submit" value="submit" />
}
_UploadFiles.cshtml
看法
@model ModelToCreate
@Html.TextBoxFor(m => m.Files.Files, new { type = "file", name = "Files" })
模型(更改为列表,并注意FileUploadModel
构造函数中的初始化程序)。
public class ModelToCreate
{
//Some properties
public FileUploadModel Files { get; set; }
}
public class FileUploadModel
{
public FileUploadModel()
{
Files = new List<HttpPostedFileBase>();
}
public List<HttpPostedFileBase> 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);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句