C# 以一种形式上载多个文件MVC4

C# 以一种形式上载多个文件MVC4,c#,asp.net-mvc,asp.net-mvc-4,file-upload,C#,Asp.net Mvc,Asp.net Mvc 4,File Upload,我正在尝试在一个表单上上载多个图像 @using (Html.BeginForm("Create", "AdminRestaurants", FormMethod.Post, new { enctype = "multipart/form-data" })) { <div class="form-group"> <label for="logoFile" class="col-sm-2 control-label">Logo:</label>

我正在尝试在一个表单上上载多个图像

@using (Html.BeginForm("Create", "AdminRestaurants", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
    <label for="logoFile" class="col-sm-2 control-label">Logo:</label>
    <div class="col-sm-6">
        <input type="file" multiple="" name="logoFile" id="logoFile" />
    </div>
</div>
<div class="form-group">
    <label for="fohFile" class="col-sm-2 control-label">FOH Logo:</label>
    <div class="col-sm-6">
        <input type="file" multiple="" name="fohFile" id="fohFile" />
    </div>
</div>
<div class="form-group">
    <label for="bohFile" class="col-sm-2 control-label">BOH Logo:</label>
    <div class="col-sm-6">
        <input type="file" multiple="" name="bohFile" id="bohFile" />
    </div>
</div>
<div class="form-group">
    <label for="mgmFile" class="col-sm-2 control-label">MGM Logo:</label>
    <div class="col-sm-6">
        <input type="file" multiple="" name="mgmFile" id="mgmFile" />
    </div>
</div>

有人能告诉我允许使用一个提交表单上载多个文件的方向吗?

只有当您的文件输入具有索引名称,如
文件[0]
文件[1]
文件[2]

为了了解asp.net mvc中模型绑定到列表的工作原理,我建议您阅读以下文章:

您甚至不必使用模型绑定来获取文件。在操作中使用
Request.Files
获取它们

public ActionResult Create(EventsModel collection)
{
    var files = Request.Files;
    // rest of the code...
}

您的问题是表单创建了一个post请求,其中包含模型绑定器可以绑定的信息,因为命名约定不正确

您可以看到,您有4个文件字段,每个字段都有不同的名称,为了让模型绑定器正确绑定它们,控制器操作签名应该如下所示:

public ActionResult Create(HttpPostedFileBase mgmFile, 
                           HttpPostedFileBase logoFile, 
                           HttpPostedFileBase fohFile ,
                           HttpPostedFileBase bohFile)
public ActionResult Create(MyViewModel i_InputModel)
{
    i_InputModel.filesUploade; //Use the files here to upload them.
}
<label for="mgmFile" class="col-sm-2 control-label">Files:</label>
<div class="col-sm-6">
    <input type="file" multiple="multiple" name="files" id="files" />
</div>
public ActionResult Create(HttpPostedFileBase files)
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
遵循MCV设计模式,最好的选择是使用包含
IEnumerable
您可以为
IEnumerable

这样你就可以这样使用它了:

Html.EditorFor(m=>Model.filesUploaded)
您的控制器操作如下所示:

public ActionResult Create(HttpPostedFileBase mgmFile, 
                           HttpPostedFileBase logoFile, 
                           HttpPostedFileBase fohFile ,
                           HttpPostedFileBase bohFile)
public ActionResult Create(MyViewModel i_InputModel)
{
    i_InputModel.filesUploade; //Use the files here to upload them.
}
<label for="mgmFile" class="col-sm-2 control-label">Files:</label>
<div class="col-sm-6">
    <input type="file" multiple="multiple" name="files" id="files" />
</div>
public ActionResult Create(HttpPostedFileBase files)
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
其他选项包括: 在文件输入字段上使用HTML5多属性,如下所示:

public ActionResult Create(HttpPostedFileBase mgmFile, 
                           HttpPostedFileBase logoFile, 
                           HttpPostedFileBase fohFile ,
                           HttpPostedFileBase bohFile)
public ActionResult Create(MyViewModel i_InputModel)
{
    i_InputModel.filesUploade; //Use the files here to upload them.
}
<label for="mgmFile" class="col-sm-2 control-label">Files:</label>
<div class="col-sm-6">
    <input type="file" multiple="multiple" name="files" id="files" />
</div>
public ActionResult Create(HttpPostedFileBase files)
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
或者使用多个文件字段,但以其名称为其编制索引:

<input type="file" multiple="multiple" name="files[0]" id="files_1" />
<input type="file" multiple="multiple" name="files[1]" id="files_2" />
<input type="file" multiple="multiple" name="files[2]" id="files_3" />
<input type="file" multiple="multiple" name="files[3]" id="files_4" />

然后您可以使用如下控制器操作:

public ActionResult Create(HttpPostedFileBase mgmFile, 
                           HttpPostedFileBase logoFile, 
                           HttpPostedFileBase fohFile ,
                           HttpPostedFileBase bohFile)
public ActionResult Create(MyViewModel i_InputModel)
{
    i_InputModel.filesUploade; //Use the files here to upload them.
}
<label for="mgmFile" class="col-sm-2 control-label">Files:</label>
<div class="col-sm-6">
    <input type="file" multiple="multiple" name="files" id="files" />
</div>
public ActionResult Create(HttpPostedFileBase files)
public ActionResult Create(IEnumerable<HttpPostedFileBase> files)
public ActionResult创建(IEnumerable文件)


在这里,我用一个简单的例子来演示:

最后一个带有索引名的解决方案非常适合我。非常感谢。