#asp.net-mvc-4 #httppostedfilebase
#asp.net-mvc-4 #httppostedfilebase
Вопрос:
В настоящее время у меня есть это:
public ActionResult Add(FormCollection form, HttpPostedFileBase fr, HttpPostedFileBase en, HttpPostedFileBase es)
{
Upload(fr, "fr");
Upload(en, "en");
Upload(es, "es");
...
}
Это работает для того, что мы делаем в настоящее время, но только что узнали о новом требовании, когда системе требуется возможность добавления других языков. Это единственная часть, в которой у меня есть проблема.
Я пытался:
public ActionResult Add(FormCollection form, HttpPostedFileBase[] fr)
{
foreach(var file in fr)
{
Upload(file, "I'mStuck");
}
...
}
в качестве теста, но в нем будет только 1 элемент, и это тот, где id / name = fr. Имеет смысл, но не особенно полезно для того, что мне нужно.
Я мог бы сделать:
for (string file in Request.Files)
{
...
}
которые отлично обрабатывали бы компонент загрузки, но проблема в том, что если я не смогу заставить их стандартизировать формат файла whatever_langabreviation.extension, чего я не могу, я не смогу узнать, что такое языковая аббревиатура.
Как я могу получить поля id / name для объектов input type = file в контроллере?
Ответ №1:
На самом деле я был неправ. Возвращаемая строка на самом деле является идентификатором или именем (думаю, именем, но, учитывая, что я обычно связываю идентификатор / имя, это работает).
Для контроллера, который изначально отображает представление, я сделал:
List<Languages> langs = db.Languages.ToList();
viewmodel.Languages = langs;
return View(viewmodel);
В самом представлении:
foreach(Language lang in Model.Languages)
{
// Label
<input type="file" id="@lang.Abbreviation" name="@lang.Abbreviation" />
}
И в событии post:
foreach(string file in Request.Files)
{
HttpPostedFileBase fb = Request.Files[file];
Upload(fb, file);
}
И он обрабатывает, как и предполагалось (загрузка — это функция, которая просто добавляет новый элемент в другую таблицу.