asp.net mvc - 文件上传绑定到Viewmodel



asp.net-mvc file-upload (2)

我有一个表单,我上传多个文件,有几个文本框和一些复选框与每个上传的文件相关联。 我已经看到上传多个文件的例子,其中actionresult签名是这样的:

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> fileUpload)

然而,我找不到任何例子,我可以有多个文件上传我的actionresult签名是这样的:

[HttpPost]
public ActionResult Upload(MyViewModel vm)

我想这个viewmodel被张贴的原因是因为我认为它比使用FormCollection变量清洁,因为我想每个文件上传和数据添加与其相关的文本框通过一个List<FileUploadPacket>方式将ViewModel的一部分

UPDATE

我的查看模式如下:

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; }
}

我的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; set; } HttpPostedFileBase UpFile { get; set; } HttpPostedFileBase UpFile { get; set; }属性到EmployeeVM类,那么我将不得不分别收集数组中的所有文件,并手动将文件映射到其描述。 有没有办法做到这一点在FileUploadPacket类本身保持UpFile属性?

我正在使用aspx视图引擎。

请帮忙。 谢谢你的时间...

https://ffff65535.com


GetHtml帮助程序不是mvc框架的一部分,您应该查找包含该帮助程序的第三方库。

上传属于ViewModel的文件很简单。 基本上是这样的

定义视图模型

public class MyViewModel 
{
     public HttpPostedFileBase MyFile { get; set; }
}

内部Views/Shared/EditorTemplates MyViewModel.cshtml ,创建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] action, vm.MyFile里面看到上传的文件。


解决这个问题正在改变你的名字和身份证上传控制。

<%: 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 )%>

这对我有效! 希望它可以帮助其他任何人..





viewmodel