我有一个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中设置一个设置吗?
答案 0 :(得分:2)
将您的媒体资源类型更改为HttpPostedFileBase
public IEnumerable<HttpPostedFileBase> Files { get; set; }
现在,已发布的文件将映射到HttpPost操作中的Files属性。