我正在尝试上传多个文件并执行此操作我正在使用ICollection<HttpPostedFileBase>
。我选择使用ICollection
代替IEnumerable
,因为使用ICollection
我可以使用函数Count
来检查ICollection
的大小。它运行得很好,问题是当我尝试检查大小时它总是有一个值,即使它是空的,即使我没有选择任何文件它有一个值,我不知道它为什么会发生。
为什么ICollection总是有一个值,即使我不选择文件?我怎么能解决这个问题?
型号
public ICollection<HttpPostedFileBase> imagens { get; set; }
HTML
<div class="form-group">
<label for="@Html.IdFor(model => model.imagens)" class="col-md-12 control-label">Imagens (Max.10) </label>
<div class="col-md-10">
@Html.TextBoxFor(model => model.imagens, new{
Class = "form-control",
placeholder = "Escolha as imagens",
multiple = "multiple",
type = "file"
})
@Html.ValidationMessageFor(model => model.imagens)
</div>
</div>
控制器
//check if ICollection is empty. It still doesn't works.
if (model.imagens.Count == 0){
jsonResposta.Add("status", "0");
jsonResposta.Add("msg", "Add at least one picture");
return Json(jsonResposta);
}
答案 0 :(得分:1)
这与您的集合类型(ICollection
)无关。浏览器(chrome是我检查过的)总是发送application/octet-stream
类型的表单数据项,即使您没有选择任何文件。这适用于单个文件选择器和多个文件选择器。我相信正是模型绑定器正在为单个文件正确处理它,但是当你的属性类型是HttpPostedFileBase集合时,它没有正确处理它。
现在,您最好的解决方案就是过滤掉自己。
[HttpPost]
public ActionResult Index(YourViewModel model)
{
var validFiles = model.imagens.Where(g=>g!=null).ToList();
//use validFiles from now onwards
// to do : Return something
}