Télécharger plusieurs fichiers en utilisant le problème HttpFileCollectionBase avec C # et MVC3

J’ai créé un contrôleur qui enregistre les fichiers.

Le code ci-dessous fait partie de ce contrôleur:

if ( Request.Files.Count != 0 ) { HttpFileCollectionBase files = Request.Files; foreach ( HttpPostedFileBase file in files ) { if ( file.ContentLength > 0 ) { if ( !file.ContentType.Equals( "image/vnd.dwg" ) ) { return RedirectToAction( "List" ); } } } } 

dans ASPX la page est simple:

   ...// many inputs type file 

Le problème est foreach car il renvoie une erreur du type (je sais, car je cours en mode débogage et place un point d’arrêt à l’instruction foreach):

 Unable to cast object of type 'System.Ssortingng' to type 'System.Web.HttpPostedFileBase'. 

Quelle est mon erreur?

Essayez comme ça:

 [HttpPost] public ActionResult Upload(IEnumerable files) { if (files != null && files.Count() > 0) { foreach (var uploadedFile in files) { if (uploadedFile.ContentType != "image/vnd.dwg") { return RedirectToAction("List"); } var appData = Server.MapPath("~/app_data"); var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName)); uploadedFile.SaveAs(filename); } } return RedirectToAction("Success"); } 

et modifiez le balisage pour que les entrées de fichier soient des fichiers nommés:

   ...// many inputs type file 
 for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; // this file's Type is HttpPostedFileBase which is in memory } 

HttpRequestBase.Files requirejs un index, utilisez donc for au lieu de foreach .

Jetez un coup d’œil à ce billet de Phil Haack qui montre comment traiter plusieurs téléchargements de fichiers à l’aide de MVC. L’object que vous essayez d’utiliser est destiné aux formulaires Web ASP.NET.