2010-08-30 4 views
3

Je suis en train d'aller à une vue avec un paramètre batchId speicifed enveloppé dans un ViewModel, choisir un fichier à télécharger, récupérer le fichier téléchargé et stocker les données de fichier w/BatchId associé valeur dans une base de données.ASP.Net fichier MVC Upload Post Paramètres

Lorsque le formulaire est envoyé, je ne sais pas comment récupérer le viewmodel et la fenetreFichierFichier pour pouvoir obtenir la valeur BatchId.

J'ai besoin de la valeur batchId pour l'associer aux données que je stocke dans la base de données.

je la méthode d'action suivante dans mon contrôleur pour permettre l'ajout de nouveaux clients au lot indiqué au moyen d'un téléchargement de fichiers et d'importation:

public ActionResult AddCustomers(int batchId) 
{ 
    var viewModel = new AddCustomersViewModel() { BatchId = batchId, //other view model properties }; 
     return View(viewModel); 
} 

Mon point de vue est fortement typé que ViewModel:

Inherits="System.Web.Mvc.ViewPage<TestExcelImport.Areas.Admin.ViewModels.AddCustomersViewModel> 

et a les éléments suivants pour le chargement de fichier:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2>AddCustomers Batch ID : <%:Model.BatchId %></h2> 

    <form action="/Admin/Dashboard/AddCustomers" enctype="multipart/form-data" method="post"> 
     <input type="file" id="SourceFile" name="SourceFile" /> 
     <br /> 
     <input type="submit" value="Send" name="btnUpload" id="Submit1" /> 
    </form> 

</asp:Content> 

Mon HttpPost Méthode d'action est défini comme:

[HttpPost] 
    public ActionResult AddCustomers(HttpPostedFileBase SourceFile) 
    { 
     //int batchId = ??? HOW DO I Get the BatchId 

      int fileLength = SourceFile.ContentLength; //works! 
      // read through SourceFile.InputStream and store it in db 
     //need the associated BatchID though  

     return RedirectToAction("Index"); 
    } 

J'ai essayé d'ajouter un AddCustomersViewModel dans la liste des paramètres de la méthode de retour de HttpPost mais il est toujours nulle. Je peux lire/analyser le fichier téléchargé très bien, je ne peux tout simplement pas revenir à quel BatchId il faisait partie de.

Quelqu'un voit ce que je fais mal?

Merci

Répondre

6

Bien qu'il existe plusieurs façons de réaliser ce que vous voulez, je recommanderais quelque chose comme ce qui suit (car il est le plus simple):

Changer votre signature de la méthode d'action pour:

public ActionResult AddCustomers(int BatchID, HttpPostedFileBase SourceFile) 

Et changer la vue rendu à:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
    <h2>AddCustomers Batch ID : <%:Model.BatchId %></h2> 

    <form action="/Admin/Dashboard/AddCustomers" enctype="multipart/form-data" method="post"> 
     <input type="hidden" value="<%: Model.BatchId %>" id="BatchID" name="BatchID" /> 
     <input type="file" id="SourceFile" name="SourceFile" /> 
     <br /> 
     <input type="submit" value="Send" name="btnUpload" id="Submit1" /> 
    </form> 

</asp:Content> 

Cela garantit que votre valeur BatchId est déclenchée avec le fichier.

solutions plus avancées (si cela ne correspond pas à vos besoins) pourraient inclure:

  • ajouter l'batchid dans l'URL que le formulaire est affiché à. En utilisant l'état de session pour stocker l'identifiant.
+1

Un grand merci qui a fonctionné. Je suis un peu confus sur la façon dont les paramètres retournent. Serait-il possible d'avoir tout viewModel remis dans la méthode de publication? Je pense que ma confusion commence b/c la plupart des exemples que j'ai vus utilisent des méthodes d'extension HtmlHelper pour le post-retour, mais comme je fais le téléchargement de fichiers dans mon code en utilisant HtmlHelpers me lançait pour une boucle. – jrob