Mam WWW ASP.NET MVC, która ma listę rozwijaną, która jest tworzona przy użyciu to w widoku ...Jak uzyskać pliki i wartości formularzy z witryny ASP.NET MVC 4?
@Html.DropDownList("Programs")
Programów jest wypełniana z kolekcji firmy Object i nadziewane w ViewBag w indeksie działanie na Home Controller ...
\\get items...
ViewBag.Programs = items;
widok ma również potencjalnie trzy pliki Dostaję tak w tym samym widoku ...
<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" />
Wszystkie z wyżej wymienionych kontroli zawarte są w formie, która jest tworzona w widoku przy użyciu ...
@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" />
}
Moje problemy to, że nie mogę znaleźć sposób, aby przetworzyć wszystkie pliki i odniesienie do pola formularza.
W szczególności muszę wiedzieć, jaki program wybrał użytkownik z menu rozwijanego.
mogę przetwarzać pliki przy użyciu tego kodu bez problemu ...
[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");
}
Ale nie mogę zrozumieć, jak również uzyskać dostęp do wartości formularza POST zwłaszcza programów rozwijaną wybraną wartość (i dla rekordu jest też pole wyboru, z którego nie mogę odczytać wartości.) Fiddler pokazuje mi, że odpowiedź ma odwołania do pliku I wybranego programu, ale nie mogę wymyślić, jak je pobrać z POST za pomocą ASP.NET MVC.
Wiem, że to pytanie jest dość proste, ale wciąż uczę się całej strony internetowej/http nie tylko MVC.
EDYTOWANIE Dzięki za odpowiedzi. Miałem wrażenie, że odpowiedź może polegać na przekazywaniu zarówno plików, jak i wartości formularza do testu POST.
Moje ostatnie pytanie brzmi ... jak zmienić blok HTML.BeginForm, aby przekazać zarówno pliki, jak i wartości formularzy? W tej chwili mam ...
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
//do stuff
}
Co należy używać, aby uzyskać wartości postaci i pliki jako oddzielne parametry ActionResult?
EDIT MY EDIT
Wydaje się, że nie trzeba wprowadzać żadnych zmian ... debugger pokazuje, że oba pliki i forma są niezerowe. Chłodny! Czy to prawda?