使用ASP.MVC 5上传的文件列表为空

时间:2016-08-17 15:01:20

标签: asp.net-mvc razor multiple-file-upload

我有一个webform,我想在其中选择一个文件列表,输入一些额外的信息并提交整个包。控制器应该根据额外输入的数据处理文件列表。因此,我想将所有模型捆绑在一起:

public class MyModel
{
    public string AdditionalInformations { get; set; }
    public int AdditionalInformationsId { get; set; }
    public IEnumerable<HttpPostedFile> Files { get; set; }
}

public class MyController: Controller
{
    [HttpPost]
    public ActionResult UploadFile(MyModel Model)
    {
        switch(Model.AdditionalInformationsId)
        {
            case 1:
                // do something with Model.Files
            case 2:
                // do something else with Model.Files
            ...
        }

        RedirectToAction("Index");
    }
}

我的观点看起来像

@model MyProgram.Models.MyModel
@using MyProgram.Models

@using (Html.BeginForm("UploadFile", "MyController", FormMethod.Post,
                                                  new { enctype = "multipart/form-data" }))
{        
    <div class="row">
        <div class="col-sm-6">                
            <input type="file" name="Files" multiple />
        </div>
        <div class="col-sm-6"></div>
    </div>
    <div class="row">
        <div class="col-sm-3">                
            @Html.DropDownListFor(model => model.AdditionalInformationsId, 
                                             ((MyDropDownList)Session["DDLists"]).companies, 
                                             Model.AdditionalInformation, 
                                             new { @class = "form-control", id = "ReceivingCompany" })
        </div>
        <div class="col-sm-3">
            <br />
            <button class="btn btn-default" type="submit">Upload</button>
        </div>
        <div class="col-sm-6"></div>
    </div>
}

如果我现在使用submit-Button,模型将被发送到控制器。例如。 AdditionalInformationsId具有在表单中输入的值。但是IEnumerable Files总是空的,除非我提交表单而没有选择任何文件进行上传,在这种情况下,列表包含null - 对象。将属性id="Files"添加到多文件输入标记也不起作用。

我找不到错误。我可能需要在web.config中设置一个设置吗?

1 个答案:

答案 0 :(得分:2)

将您的媒体资源类型更改为HttpPostedFileBase

的IEnumerable
public IEnumerable<HttpPostedFileBase> Files { get; set; }

现在,已发布的文件将映射到HttpPost操作中的Files属性。