我从我的视图页面传递了一到五个图像到控制器。
<input type="file" name="Images" /><br />
<input type="file" name="Images" /><br />
<input type="file" name="Images" /><br />
<input type="file" name="Images" /><br />
<input type="file" name="Images" /><br />
我在控制器上收到这样的
IEnumerable<HttpPostedFileBase> images
将此数据与其他数据一起发送到myDomainModel 我试过这个
List<Photo> Photos = new List<Photo>();
for (int i = 0; i < Images.Count(); i++)
{
foreach (var image in Images)
{
Photo p = new Photo();
p.ImageMimeType = image.ContentType;
p.ImageData = new byte[image.ContentLength];
image.InputStream.Read(p.ImageData, 0, image.ContentLength);
Photos.Add(p);
}
}
但Images.Count()返回整个列表的容量,所以当我发布时,让我说2个图像而不是5个我遇到麻烦导致代码尝试循环5次。
所以,问题是如何获取列表中的元素数量。不是容量。
谢谢。
答案 0 :(得分:1)
您可以测试ContentLength
是否为空(或者是否还有其他属性可以检查是否提交了“图片”)?
然后你可以使用Linq并执行:int nbImages = Images.Count(i => i.ContentLength > 0);
答案 1 :(得分:1)
目前尚不清楚发生了什么。听起来好像源页面正在添加用户未提交的空白图像?如果是这种情况,那么你最好在那里解决这个问题。
如果失败了,那么这应该有效:
var Photos = new List<Photo>();
foreach (var image in Images)
{
if(image != null && image.ContentLength > 0)
{
Photo p = new Photo();
p.ImageMimeType = image.ContentType;
p.ImageData = new byte[image.ContentLength];
image.InputStream.Read(p.ImageData, 0, image.ContentLength);
Photos.Add(p);
}
}