通过视图模型上传的文件为null

时间:2017-02-28 08:47:19

标签: asp.net-mvc file viewmodel

我有两个视图模型,如下所示

public class hdr_doc_upload
{
    public string document_name { get; set; }
    public HttpPostedFileBase UpFile { get; set; }
}

public class list_doc
{
    public List<hdr_doc_upload> hdr_doc_upload { get; set; }
}

控制器

public ActionResult Create_Group()
{
    list_doc list = new list_doc();
    return View(list);
}

查看

@Html.TextBoxFor(model => model.hdr_doc_upload[0].document_name)
<input type="file" id="hdr_doc_upload[0].UpFile" name="hdr_doc_viewmodel[0].UpFile" />
@Html.TextBoxFor(model => model.hdr_doc_upload[1].document_name)
<input type="file" id="hdr_doc_upload[1].UpFile" name="hdr_doc_viewmodel[1].UpFile" />

将我放在屏幕下方

enter image description here

但是当我提交页面时,我们只得到文件的值为null的文本框值。 enter image description here

1 个答案:

答案 0 :(得分:1)

您创建的手册<input>元素具有与您的模型无关的name属性。属性需要

name="hdr_doc_upload[0].UpFile" // not hdr_doc_viewmodel[0].UpFile

但是,您应该在TextBoxFor()循环内使用强类型for方法正确地控制文件输入。

在控制器中,在将模型传递给视图之前,使用2个新hdr_doc_upload实例填充模型

list_doc list = new list_doc()
{
    new list_doc(),
    new list_doc()
};
return View(list);

然后在视图中

for(int i = 0; i < Model.Count; i++)
{
    @Html.TextBoxFor(model => model.hdr_doc_upload[i].document_name)
    @Html.TextBoxFor(model => model.hdr_doc_upload[i].UpFile, new { type = "file" })
}