Переменное количество объектов HttpPostedFileBase

#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);
}
  

И он обрабатывает, как и предполагалось (загрузка — это функция, которая просто добавляет новый элемент в другую таблицу.