Подтвердить что ты не робот

Request.Files.Count всегда 0 при загрузке изображения в MVC 5

У меня есть контроллер Post на модели с некоторыми строковыми полями и изображением. Точный идентичный код работает на MVC4, но в MVC 5 Request.Files.Count всегда 0

Моя модель имеет байт [] для изображения, а не HttpPostedFileBase

Мой вид:

@using (Html.BeginForm("Create", "HotelManager", FormMethod.Post, new { enctype = "multipart/form-data", data_ajax = "false" }))
{
    @Html.AntiForgeryToken()
    @Html.TextBoxFor(model => model.Title, new { @class = "form-control" })
    @Html.TextAreaFor(model => model.Description, new { @class = "form-control", @rows = "7" })
    <input type="file" class="form-control filestyle">
    <input type="submit" value="Submit" class="btn btn-block" />
}

Я пробовал пропустить data_ajax = "false", но не использовал.

My Post Controller выглядит следующим образом:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "Title,Description,Image")] Hotel hotel)
    {
        if (ModelState.IsValid)
        {
            // deal with the uploaded file
            if (Request.Files.Count > 0)
            {
                HttpPostedFileBase file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    // Code to process image, resize, etc goes here
                }
            }

        // Other code to add the hotel to db goes here
    }

В отладчике я вижу, что Request.Files.Count всегда равен нулю, я не знаю, почему? Я скопировал код представления и контроллера из другого проекта MVC4, где он работает нормально.

Key Value
Request POST /HotelManager/Create HTTP/1.1
Accept  text/html, application/xhtml+xml, */*
Referer http://localhost:4976/HotelManager/Create
Accept-Language en-US,en;q=0.5
User-Agent  Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; ASU2JS; rv:11.0) like Gecko
Content-Type    multipart/form-data; boundary=---------------------------7de207070a24
Accept-Encoding gzip, deflate
Host    localhost:4976
Content-Length  946
DNT 1

И в окне IE Developer я вижу, что тело формы пуст.

4b9b3361

Ответ 1

Я потратил столько времени, и оказалось, что мне нужно было также использовать атрибут name

 <input type="file" name="somename"> 

в моем новом проекте отсутствует атрибут name.

Ответ 3

Добавить Вам нужно изменить метод post.

Необходимо добавить:

new { enctype = "multipart/form-data" }

Вот полный тег формы

@using (Html.BeginForm("Cars", "Expense", FormMethod.Post, 
      new { enctype = "multipart/form-data" }))

Эти линии необходимы; без них вы не сможете сохранить входной файл типа. Я сидел 6 часов, пытаясь понять это.