如何将上载的文件绑定到IEnumerable <httppostedfilebase> property </httppostedfilebase>

时间:2010-02-19 04:14:16

标签: .net asp.net-mvc viewmodel

这是html表格:

<input id="picture1" name="Input_Pictures" type="file" value="" />
<input id="picture2" name="Input_Pictures" type="file" value="" />
<input id="picture3" name="Input_Pictures" type="file" value="" />

我也尝试过:

<input id="picture1" name="Input_Pictures[]" type="file" value="" />
<input id="picture2" name="Input_Pictures[]" type="file" value="" />
<input id="picture3" name="Input_Pictures[]" type="file" value="" />

也是:

<input id="picture1" name="Input_Pictures[0]" type="file" value="" />
<input id="picture2" name="Input_Pictures[1]" type="file" value="" />
<input id="picture3" name="Input_Pictures[2]" type="file" value="" />

这是我的观点模型:

public class PicturesInputViewModel
{
     public IEnumerable<HttpPostedFileBase> Pictures { get; set; }
}

这是提交行动:

[HttpPost]
public ActionResult Submit(PicturesInputViewModel input)      
{

可以查看Request.Files集合中的文件,但Pictures始终为空。

如何解决此绑定问题?


我成功使用此代码的平均时间:

 var pics = new List<HttpPostedFileBase>();
 foreach (string name in Request.Files)
 {
     var file = Request.Files[name];
         if (file.ContentLength > 0)
             pics.Add(file);        
 }
 input.Pictures = pics;

2 个答案:

答案 0 :(得分:0)

尝试为控件指定不同的名称: Picture[1], Picture[2], .. , Picture[n]。 Binder无法决定picture2必须在Pictures集合中。

抱歉,MVC没有文件集合的活页夹。 您可以使用MvcFutures项目中的FileCollectionModelBinder。 您所要做的就是引用MVCFutures程序集并添加其他模型绑定程序(在global.asax.cs或其他地方):

FileCollectionModelBinder.RegisterBinder(ModelBinders.Binders); 

答案 1 :(得分:-2)

查看此帖子Having troubles calling a Controller Post Method…

这可能会为您提供有关如何解决问题的线索。