MVC 4 Html.BeginForm () не загружает несколько файлов

#asp.net-mvc-4

#asp.net-mvc-4

Вопрос:

Я пытаюсь загрузить два изображения из формы в MVC 4. Я видел эту статью, и она отлично работает так, как это делал Haaked, но когда я попытался сделать то же самое с помощью @using(Html.BeginForm()) , это не сработало

У меня есть метод Action от контроллера, который работает для обоих сценариев:

 [HttpPost]
    public ActionResult Photo(IEnumerable<HttpPostedFileBase> files)
    {
        foreach (var file in files)
        {
            if (file != null amp;amp; file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/Content/Photos/"), fileName);
                file.SaveAs(path);
            }
        }
        return RedirectToAction("Photo");
    }
  

Проблема возникает из представления. Вот код с взломанного веб-сайта, для представления, который работает:

 <form action="" method="post" enctype="multipart/form-data">

    <label for="file1">Filename:</label>
    <input type="file" name="files" id="file1" />

    <label for="file2">Filename:</label>
    <input type="file" name="files" id="file2" />

    <input type="submit" />
</form>
  

И вот мой код, который этого не делает.

 @using (Html.BeginForm())
{
    <label for="file1">Filename:</label>
    <input type="file" name="files" id="file1" />

    <label for="file2">Filename:</label>
    <input type="file" name="files" id="file2" />

    <input type="submit" />
}
  

Что я делаю не так?

Ответ №1:

Вам необходимо указать enctype в перегрузке метода Html.BeginForm для загрузки файла.

 @using (Html.BeginForm("YourAction", "YourController", FormMethod.Post,
    new { enctype = "multipart/form-data" }))
{
    <label for="file1">Filename:</label>
    <input type="file" name="files" id="file1" />

    <label for="file2">Filename:</label>
    <input type="file" name="files" id="file2" />

    <input type="submit" />
}