Carica più file usando il problema HttpFileCollectionBase con C # e MVC3

Ho creato un controller che salva i file.

Il codice seguente è una parte di quel controller:

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" ); } } } } 

nella pagina ASPX è semplice:

   ...// many inputs type file 

Il problema è foreach perché restituisce un errore del tipo (lo so perché corro in modalità Debug e posto breakpoint all’istruzione foreach):

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

Qual è il mio errore?

Prova così:

 [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"); } 

e modificare il markup in modo che gli input del file siano file con nome:

   ...// 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 richiede un indice, quindi usa for invece di foreach .

Dai un’occhiata a questo post di Phil Haack che dimostra come elaborare più caricamenti di file usando MVC. L’object che si sta tentando di utilizzare è per le Webform ASP.NET.