web-dev-qa-db-fra.com

Request.Files.Count toujours 0 lors du téléchargement de l'image dans MVC 5

J'ai un contrôleur Post sur un modèle avec des champs de chaîne et une image. Le code identique exact fonctionne sur MVC4 mais dans MVC 5, le Request.Files.Count est toujours 0

Mon modèle a l'octet [] pour l'image plutôt que HttpPostedFileBase

Mon avis:

@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" />
}

J'ai essayé d'omettre data_ajax = "false" mais sans utilité.

Mon Post Controller est le suivant:

    [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
    }

Dans le débogueur, je vois que le Request.Files.Count est toujours nul, je ne sais pas pourquoi? J'ai copié à la fois la vue et le code du contrôleur d'un autre projet MVC4 où cela fonctionne bien.

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

Et dans la fenêtre IE Developer, je vois que le corps du formulaire est vide.

24
indichimp

J'ai perdu tellement de temps et il s'avère que tout ce que j'avais à faire était d'utiliser également l'attribut name

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

l'attribut de nom manquait dans mon nouveau projet.

45
indichimp

Vous devez changer la méthode de publication

Besoin d'ajouter:

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

Voici la balise complète du formulaire

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

Voir comment publier plusieurs fichiers

39
Ali Adravi

Pour ajouter, vous devez changer la méthode de publication.

Besoin d'ajouter:

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

Voici la balise complète du formulaire

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

Ces lignes sont essentielles; sans eux, vous ne pourrez pas enregistrer une entrée de type fichier. Je me suis assis pendant 6 heures pour essayer de comprendre cela.

11
Sanvir

L'une des raisons pour lesquelles Request.Files.Count devient 0 est lorsque vous essayez de télécharger un fichier plus grand que le maxRequestLength spécifié sur le fichier Web.config. Assurez-vous de vérifier cette valeur si vous rencontrez un problème avec Request.Files.Count.

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="4096" />
  </system.web>
</configuration>

MISE À JOUR: Cette réponse n'est peut-être pas directement liée au problème d'OP, mais comme google répertorie ce message en haut pour le problème Request.Files.Count = 0, a publié la réponse qui a fonctionné pour moi.

2
Gayan Dasanayake