2012-10-24 2 views
8

ich eine ASP.NET MVC Website, die eine Dropdown-Liste, die in der Ansicht mit diesem ...Wie bekomme ich Dateien und Formularwerte von einer ASP.NET MVC 4-Website?

@Html.DropDownList("Programs") 

Programme bevölkert wird von einem Business Object Sammlung und stopfte in den Index in die ViewBag wird erstellt Aktion auf dem Home Controller ...

\\get items... 
ViewBag.Programs = items; 

der Blick auch potenziell drei Dateien hat ich bin wie dies in der gleichen Ansicht bekommen ...

<input type="file" name="files" id="txtUploadPlayer" size="40" /> 
<input type="file" name="files" id="txtUploadCoaches" size="40" /> 
<input type="file" name="files" id="txtUploadVolunteers" size="40" /> 

Alle vorgenannten Kontrollen werden in einer Form enthalten, die in der Ansicht erstellt wird ...

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    <!-- file and other input types --> 
    <input type="submit" name="btnSubmit" value="Import Data" /> 
} 

Meine Probleme ist, dass ich nicht einen Weg zu verarbeiten alle Dateien und verweisen auf die Formularfelder finden.

Insbesondere muss ich wissen, welches Programm der Benutzer aus dem Dropdown ausgewählt hat.

Ich kann die Dateien verarbeiten diesen Code ohne Probleme mit ...

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files) 
//public ActionResult Index(FormCollection form) 
{ 

    _tmpFilePath = Server.MapPath("~/App_Data/uploads"); 

    if (files == null) return RedirectToAction("Index"); 
    foreach (var file in files) 
    { 
     if (file != null && file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      var path = Path.Combine(_tmpFilePath, fileName); 
      if (System.IO.File.Exists(path)) System.IO.File.Delete(path); 

      _file = file; 

      file.SaveAs(path); 

      break; //just use the first file that was not null. 
     } 
    } 



    //SelectedProgramId = 0; 

    //DoImport(); 

    return RedirectToAction("Index"); 
} 

Aber ich kann nicht verstehen, wie AUCH für den Zugriff auf die POST-Formularwerte erhalten vor allem die Drop-Down-Programme ausgewählten Wert (und für den Datensatz Es gibt auch eine Checkbox, von der ich den Wert nicht lesen kann.) Fiddler zeigt mir, dass die Antwort die Dateiverweise UND das ausgewählte Programm hat, aber ich kann nicht herausfinden, wie man sie mit ASP.NET MVC aus dem POST holt.

Ich weiß, diese Frage ist ziemlich einfach, aber ich lerne immer noch das ganze Web/http Sache nicht nur MVC.

BEARBEITEN Danke für Ihre Antworten. Ich hatte den Gedanken, dass die Antwort darin liegen könnte, sowohl die Dateien als auch die Formularwerte in den POST zu übergeben.

Also meine letzte Frage ist ... Wie ändere ich den HTML.BeginForm Block, um sowohl die Dateien und Formularwerte übergeben? Im Moment habe ich ...

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    //do stuff 
} 

Was sollte die Anweisung using sein, um beide Formularwerte und Dateien als separate Parameter des Action zu bekommen?

EDIT MY EDIT
Es scheint, dass ich Änderungen nicht ... machen muß der Debugger zeigt, dass beide Dateien und Form sind nicht null. Cool! Ist das richtig?

Antwort

7

Ich denke, dass dies tun, sollte es

[HttpPost] 
public ActionResult Index(IEnumerable<HttpPostedFileBase> files, FormCollection form) 
{ 
    //handle the files 

    //handle the returned form values in the form collection 
} 

Sie sollten in zwei Parameter in der [Httppost] Aktion passieren können. Sie können den HTML-Namen auch übergeben.

Edit: Ich hatte auch Probleme mit Formularen in ASP.net. Ich schlage vor, in diesem Blogbeitrag von Scott Allen zu suchen. http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx

1

einen Ansichtsmodell-Typen verwenden, die beide enthalten, die gebuchten Dateien und Formularwerte oder die HttpRequest verwendet Objekt (über das Controller.Request Eigenschaft zugegriffen), die für .Form[key] POST Werte und .Files[key] für entsandte Dateien hat.

Verwandte Themen