2013-02-04 3 views
3

J'utilise C# et ASP.NET MVC4 pour une application Web (modèle mobile).Le téléchargement de fichier ne fonctionne pas dans ASP.NET MVC4 - modèle mobile

Maintenant, j'ai le code suivant à mon avis:

 @using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
    <label for="file">Upload:</label> 
    <input type="file" name="file" id="file"/> 
    <input type="submit" value="Upload" /> 
    } 

et dans mon contrôleur:

[HttpPost] 
    public ActionResult Index(HttpPostedFileBase file) 
    { 
     string path = System.IO.Path.Combine(Server.MapPath("~/Content"), System.IO.Path.GetFileName(file.FileName)); 
     file.SaveAs(path); 
     ViewBag.Message = "File uploaded successfully"; 
     return View(); 
    } 

quand je lance l'application et essayer de télécharger un fichier, je reçois " La référence d'objet n'est pas définie à une instance d'un objet." message dans Visual Studio. Mais je sais que le code ci-dessus fonctionne très bien dans ASP.NET MVC3 comme je l'ai déjà utilisé.

Quelqu'un peut-il m'aider avec ceci?

+1

Quelle ligne est l'erreur lancée? – DGibbs

+0

cette ligne: chaîne path = System.IO.Path.Combine (Server.MapPath ("~/Content"), System.IO.Path.GetFileName (file.FileName)); – archie

+0

Donc, quand vous déboguez, le paramètre 'file' est null? –

Répondre

3

Ajouter cet attribut à votre formulaire: data-ajax="false"

@using(Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype="multipart/form-data", data_ajax="false"})){ 
    <label for="file">Upload:</label> 
    <input type="file" name="file" id="file"/> 
    <input type="submit" value="Upload" /> 
} 
+1

wow que travaillé! Je vous remercie. pouvez-vous expliquer quel était le problème? – archie

+2

'jQuery Mobile AJAXifie les formulaires et, comme vous le savez déjà, il n'est pas possible de télécharger des fichiers en utilisant AJAX. Pour contourner le problème, vous pouvez ajouter l'attribut data-ajax = "false" à votre élément

pour empêcher jQuery Mobile de le pirater et d'utiliser AJAX. "- [source here] (http://stackoverflow.com/a/12690288/ 1317705) –

+1

@ Quarante-deux résume fondamentalement, voici un autre article: http://forum.jquery.com/topic/jquery-mobile-seems-to-clobber-ability-to-upload-files-via-forms – MisterIsaak

1

Vous n'avez pas besoin d'utiliser HttpPostedFileBase, car vous n'avez pas besoin de recevoir de paramètres dans votre action [HttpPost]. Vous pouvez obtenir votre dossier de la demande comme celui-ci aussi longtemps que votre formulaire est définie sur enctype = "multipart/form-data" (que vous avez déjà faites):

var file = Request.Files[0]; 
+0

merci, j'ai essayé la ligne ci-dessus, mais j'ai eu cette erreur "L'index était hors de portée.Peut être non négatif et inférieur à la taille de la collection Nom du paramètre: index" – archie

Questions connexes