2016-08-17 4 views
0

J'ai un formulaire Web où je veux sélectionner une liste de fichiers, entrer des informations supplémentaires et soumettre l'ensemble du paquet. Le contrôleur doit traiter la liste de fichiers en fonction des données saisies en plus. Par conséquent, je veux regrouper en un seul modèle:Liste des fichiers téléchargés avec ASP.MVC 5 est vide

public class MyModel 
{ 
    public string AdditionalInformations { get; set; } 
    public int AdditionalInformationsId { get; set; } 
    public IEnumerable<HttpPostedFile> Files { get; set; } 
} 

public class MyController: Controller 
{ 
    [HttpPost] 
    public ActionResult UploadFile(MyModel Model) 
    { 
     switch(Model.AdditionalInformationsId) 
     { 
      case 1: 
       // do something with Model.Files 
      case 2: 
       // do something else with Model.Files 
      ... 
     } 

     RedirectToAction("Index"); 
    } 
} 

Mon point de vue ressemble

@model MyProgram.Models.MyModel 
@using MyProgram.Models 

@using (Html.BeginForm("UploadFile", "MyController", FormMethod.Post, 
                new { enctype = "multipart/form-data" })) 
{   
    <div class="row"> 
     <div class="col-sm-6">     
      <input type="file" name="Files" multiple /> 
     </div> 
     <div class="col-sm-6"></div> 
    </div> 
    <div class="row"> 
     <div class="col-sm-3">     
      @Html.DropDownListFor(model => model.AdditionalInformationsId, 
              ((MyDropDownList)Session["DDLists"]).companies, 
              Model.AdditionalInformation, 
              new { @class = "form-control", id = "ReceivingCompany" }) 
     </div> 
     <div class="col-sm-3"> 
      <br /> 
      <button class="btn btn-default" type="submit">Upload</button> 
     </div> 
     <div class="col-sm-6"></div> 
    </div> 
} 

Si j'utilise maintenant le soumettre-Button, le modèle est envoyé au contrôleur. Par exemple. AdditionalInformationsId a la valeur entrée dans le formulaire. Mais IEnumerable Files est toujours vide, sauf si je soumets le formulaire sans choisir de fichiers à télécharger, dans ce cas la liste contient un null -objet. En outre, l'ajout de l'attribut id="Files" à la balise d'entrée de fichiers multiples ne fonctionne pas.

Je ne trouve pas l'erreur. Y a-t-il peut-être un paramètre que je dois définir dans le web.config?

Répondre

1

Changer votre type de propriété à IEnumerable de HttpPostedFileBase

public IEnumerable<HttpPostedFileBase> Files { get; set; } 

Maintenant, les fichiers affichés seront redirigés à la propriété des fichiers dans votre action HttpPost.

+0

Merci beaucoup, maintenant ça marche! Je suis curieux, savez-vous pourquoi cela ne fonctionne pas en utilisant 'public IEnumerable Fichiers {get; ensemble; } '? –