可变数量的HttpPostedFileBase对象

时间:2014-07-02 20:56:37

标签: 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_langabbreviation.extension文件格式进行标准化,我无法做到,我将无法知道语言缩写是什么。

如何获取控制器中输入type = file对象的id / name字段?

1 个答案:

答案 0 :(得分:0)

我其实不对。返回的字符串实际上是id或name(想想名字,但考虑到我通常配对id / name,它可以工作)。

对于最初渲染视图的控制器,我做了:

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" />
}

在后期活动中:

foreach(string file in Request.Files)
{
  HttpPostedFileBase fb = Request.Files[file];
  Upload(fb, file);
}

它按照预期处理(上传是一个只是将新项目添加到另一个表格的函数。