Как получить файлы и значения формы из ASP.NET веб-сайт MVC 4?
у меня есть ASP.NET веб-сайт MVC с раскрывающимся списком, который создается с помощью этого в представлении...
@Html.DropDownList("Programs")
программы заполняются из коллекции бизнес-объектов и заполняются в ViewBag в действии индекса на домашнем контроллере...
get items...
ViewBag.Programs = items;
представление также потенциально имеет три файла, которые я получаю в том же представлении...
<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" />
все вышеупомянутые элементы управления содержатся в форме, которая создается в вид с помощью...
@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" />
}
мои проблемы в том, что я не могу найти способ обработать все файлы и ссылаться на поля формы.
в частности, мне нужно знать, какую программу пользователь выбрал из раскрывающегося списка.
Я могу обрабатывать файлы с помощью этого кода без проблем...
[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");
}
но я не могу понять, как также получить доступ к значениям формы POST, особенно к выбранному значению раскрывающегося списка программ (и для записи есть также флажок, из которого я не могу прочитать значение.) Fiddler показывает мне, что в ответе есть ссылки на файлы и выбранная программа, но я не могу понять, как получить их из сообщения, используя ASP.NET MVC.
Я знаю, что этот вопрос довольно простой, но я все еще изучаю всю вещь web/http, а не только MVC.
редактировать Спасибо за ответы. У меня была мысль, что ответ может лежать в передаче Как файлов, так и значений формы в пост.
Итак, мой последний вопрос ... как изменить HTML.Блок BeginForm для передачи как файлов, так и значений формы? Сейчас да ...
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
//do stuff
}
каким должен быть оператор using для получения значений формы и файлов в качестве отдельных параметров ActionResult?
EDIT MY EDIT
Кажется, мне не нужно ничего менять...отладчик показывает, что и файлы, и форма не имеют значения null. Круто! Заключаться в том правильно?
2 ответов
Я думаю, что это должно помочь
[HttpPost]
public ActionResult Index(IEnumerable<HttpPostedFileBase> files, FormCollection form)
{
//handle the files
//handle the returned form values in the form collection
}
вы должны иметь возможность передать 2 параметра в действии [HttpPost]. вы также можете передать имя HTML.
Edit: у меня также были проблемы с формами в ASP.net - ... Я предлагаю посмотреть этот пост в блоге Скотта Аллена. http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx
используйте тип ViewModel, который содержит как отправленные файлы, так и значения формы, или используйте HttpRequest
(доступ через Controller.Request
свойства объекта), которое .Form[key]
для значений POST и .Files[key]
за размещенные файлы.