>我有一个表单,我正在上传多个文件,并且有几个文本框和一些复选框与要上传的每个文件相关联。我见过上传多个文件的示例,其中操作结果签名如下所示:
[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileUpload)
但是,我找不到任何可以上传多个文件的示例,其中我的操作结果签名如下所示:
[HttpPost]
public ActionResult Upload(MyViewModel vm)
我希望发布此视图模型的原因是,我认为它比使用 FormCollection 变量更干净,并且因为我希望通过List<FileUploadPacket>
将要上传的每个文件和添加的数据及其关联的文本框分组在一起,该将是视图模型的一部分
更新
我的视图模型如下:
public class EmployeeVM
{
public int EmployeeID {get ;set;}
public string EmpName {get ;set;}
//Other properties
public List<FileUploadPacket> FileUploadPackets { get; set; }
}
具有 HttpPostedFileBase 类型的属性的 FileUploadPacket 类
public class FileUploadPacket
{
public int FileID {get ;set;}
public string UserEnteredDesc {get ;set;}
//some more other properties
public HttpPostedFileBase UpFile { get; set; }
}
我的视图的代码片段.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 )%>
如您所见,我将特定于要上传的这个文件的所有其他属性保存在其自己的类中。这样,在我的表格中,员工可以输入他的名字并上传他的文件,并为每个文件提供一些描述和其他详细信息。如果我将 public HttpPostedFileBase UpFile { get; set; }
属性移动到 EmployeeVM
类,那么我将不得不在一个数组中单独收集所有文件,并手动将文件映射到其描述。有没有办法将UpFile
属性保留在FileUploadPacket
类本身中?
我正在使用 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" />
}
必需属性对于上传文件很重要。
就是这样,提交表单后,您应该会在[HttpPost]
操作中看到上传的文件,vm.MyFile
.
更改上传控件的名称和 ID 方式。
<%: Html.TextBoxFor(model => model.EmpName, new { maxLength = 50 })%>
Upload your files here:
<input type="file" id="FileUploadPackets[0].UpFile" name="FileUploadPackets[0].UpFile" value="ActionHandlerForForm" />
<%: Html.TextBoxFor(model => model.FileUploadPackets[0].UserEnteredDesc )%>
<input type="file" id="FileUploadPackets[1].UpFile" name="FileUploadPackets[1].UpFile" value="ActionHandlerForForm" />
<%: Html.TextBoxFor(model => model.FileUploadPackets[1].UserEnteredDesc )%>
这对我有用!!希望它能帮助其他人。