我有一个表单,我上传多个文件,并有几个文本框和一些复选框与每个上传的文件相关联.
我已经看到了上传多个文件的示例,其中actionresult签名是这样的:
我已经看到了上传多个文件的示例,其中actionresult签名是这样的:
[HttpPost] public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileUpload)
但是,我无法找到任何可以上传多个文件的示例,其中我的actionresult签名是这样的:
[HttpPost] public ActionResult Upload(Myviewmodel vm)
我想要发布这个视图模型的原因是因为我认为它比使用FormCollection变量更清晰,因为我希望每个文件都被上传,并且添加的数据及其相关的文本框将通过List< FileUploadPacket>组合在一起.这将是viewmodel的一部分
UPDATE
My View模型如下:
public class EmployeeVM { public int EmployeeID {get ;set;} public string EmpName {get ;set;} //Other properties public List<FileUploadPacket> FileUploadPackets { get; set; } }
FileUploadPacket类,其属性类型为HttpPostedFileBase
public class FileUploadPacket { public int FileID {get ;set;} public string UserEnteredDesc {get ;set;} //some more other properties public HttpPostedFileBase UpFile { get; set; } }
我的view.aspx的代码片段如下
<%: Html.TextBoxFor(model => model.EmpName,new { maxLength = 50 })%> Upload your files here: <input type="file" id="UpFile" name="UpFile" value="ActionHandlerForForm" /> <%: Html.TextBoxFor(model => model.FileUploadPackets[0].UserEnteredDesc )%> <input type="file" id="UpFile" name="UpFile" value="ActionHandlerForForm" /> <%: Html.TextBoxFor(model => model.FileUploadPackets[1].UserEnteredDesc )%>
正如您所看到的,我将所有其他特定于此上传文件的属性保存在自己的类中.因此,在我的表单中,员工可以输入他的姓名并上传他的文件,并为每个文件提供一些描述和其他详细信息.如果我移动公共HttpPostedFileBase UpFile {get;组;在EmployeeVM类的属性然后我将必须在数组中单独收集所有文件并手动将文件映射到其描述.有没有办法保持FileUploadPacket类本身的UpFile属性?
我正在使用aspx视图引擎.
请帮忙.谢谢你的时间…
解决方法
GetHtml帮助程序不是mvc框架的一部分,您应该查找包含该帮助程序的第三方库.
定义视图模型
public class Myviewmodel { public HttpPostedFileBase MyFile { get; set; } }
在Views / Shared / EditorTemplates中,创建Myviewmodel.cshtml
<input type="file" id="MyFile" name="MyFile" />
并查看,对应上传动作
@model Myviewmodel @using(Html.BeginForm("Upload","MyController",FormMethod.Post,new { enctype="multipart/form-data"}) { @Html.EditorForModel() <input type="submit" value="Upload" /> }