簡體   English   中英

以一種形式MVC4上傳多個文件

[英]Upload multiple files in one form MVC4

我正在嘗試在一個表單上上傳多個圖像

@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>

我正試圖用這個處理控制器上的表單

public ActionResult Create(IEnumerable<HttpPostedFileBase> files, RestaurantModel collection)
{
    if (ViewData.ModelState.IsValid)
    {
    }
}

目前,控制器上的files簽名中沒有任何內容。 僅使用一個文件時,這似乎很有效

public ActionResult Create(HttpPostedFileBase file, EventsModel collection)

有人能指出我允許用一個提交表單上傳多個文件的方向嗎?

您的問題是表單創建了一個post請求,其中包含模型綁定器可以綁定的信息,因為命名約定不正確。

你看,你有4個文件字段,每個字段都有不同的名稱,模型綁定器正確綁定它們你的控制器動作簽名應如下所示:

public ActionResult Create(HttpPostedFileBase mgmFile, 
                           HttpPostedFileBase logoFile, 
                           HttpPostedFileBase fohFile ,
                           HttpPostedFileBase bohFile)

繼MCV的設計模式最好的辦法是使用一個保存了一個視圖模型IEnumerable<HttpPostedFileBase>你會為創建一個自定義編輯器模板IEnumerable<HttpPostedFileBase>

所以你可以像這樣使用它:

Html.EditorFor(m=>Model.filesUploaded)

你的控制器動作看起來像這樣:

public ActionResult Create(MyViewModel i_InputModel)
{
    i_InputModel.filesUploade; //Use the files here to upload them.
}

其他選項包括:在文件輸入字段上使用HTML5 multiple屬性,如下所示:

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

或使用多個文件字段,但在其名稱中對其進行索引:

<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(IEnumerable<HttpPostedFileBase> files)

只有當您的文件輸入具有索引名稱(如files[0]files[1]files[2] ,... files[2] ,這才有效。

為了理解模型綁定到列表如何在asp.net mvc中工作,我建議你閱讀這篇文章: 模型綁定到列表

您甚至不必使用模型綁定來獲取文件。 在Action中使用Request.Files來獲取它們。

public ActionResult Create(EventsModel collection)
{
    var files = Request.Files;
    // rest of the code...
}
<td>
      <input type="file" name="files" id="files" multiple="multiple" />
      </td>

在這里,我用簡單的例子演示: http//www.infinetsoft.com/Post/How-to-create-multiple-fileUpload-using-asp-net-MVC-4/1229#.V0J-yfl97IU

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM