Asp.net mvc 在MVC中检索一组二进制图像

Asp.net mvc 在MVC中检索一组二进制图像,asp.net-mvc,model-view-controller,binary,Asp.net Mvc,Model View Controller,Binary,我的图像存储在ASP.NET MVC数据库中的varbinary列中。我尝试使用foreach循环检索它们 我在控制器中写过这样的内容 { db = new VideoContext(); ViewData["VideoMenu"] = db.VideosMaster.ToList(); } 并尝试在视图中显示它,如下所示: foreach (var v in (IEnumerable<VideoJug.Models.VideosMaste

我的图像存储在ASP.NET MVC数据库中的
varbinary
列中。我尝试使用foreach循环检索它们

我在控制器中写过这样的内容

    {
        db = new VideoContext();
        ViewData["VideoMenu"] = db.VideosMaster.ToList();
    }
并尝试在视图中显示它,如下所示:

foreach (var v in (IEnumerable<VideoJug.Models.VideosMaster>)ViewData["VideoMenu"])
{
    <img src="@String.Format("data:image/jpg;base64,{0}",    
    Convert.ToBase64String(v.VideoThumbnail));" width="100" height="100" />
} 
foreach(在(IEnumerable)视图数据[“视频菜单”]中的变量v)
{
} 
但我有一个错误:

值不能为null。参数名称:inArray


有人能帮我解决这个问题吗?

发生错误的原因是,您正在迭代的IEnumerable中的一个对象的VideoThumbnail为空。您应该在循环中对此进行检查,如果是这种情况,则渲染默认图像

foreach (var v in (IEnumerable<VideoJug.Models.VideosMaster>)ViewData["VideoMenu"])
{
    if(v.VideoThumbnail != null)
    {
        <img src="@String.Format("data:image/jpg;base64,{0}",    
            Convert.ToBase64String(v.VideoThumbnail));" width="100" height="100" />
    }
    else
    {
        <img src="@Url.Content("~/Content/images/video-placeholder.jpg")" width="100" height="100" />
    }
} 
foreach(在(IEnumerable)视图数据[“视频菜单”]中的变量v)
{
如果(v.video缩略图!=null)
{
}
其他的
{
}
} 
顺便说一下,以这种方式渲染图像是不好的做法。要在MVC中完成您想做的事情,最好的方法是在控制器中创建一个单独的操作,该操作返回图像的二进制内容,并在该视图中仅呈现URL

// Controller
public ActionResult VideoThumbnail(int videoId)
{
    var video = db.VideosMaster.FirstOrDefault(x => x.Id == videoId);

    if(video != null && video.VideoThumbnail != null)
    {
        return File(video.VideoThumbnail, "image/jpg");
    }

    return File(Url.Content("~/Content/images/video-placeholder.jpg"), 
            "image/jpg");
}

// View
foreach (var v in (IEnumerable<VideoJug.Models.VideosMaster>)ViewData["VideoMenu"])
{
    <img src="@Url.Action("VideoThumbnail", new { videoId = v.Id })"
        width="100" height="100" />
} 
//控制器
公共行动结果视频缩略图(int videoId)
{
var video=db.VideosMaster.FirstOrDefault(x=>x.Id==videoId);
if(video!=null&&video.video缩略图!=null)
{
返回文件(video.video缩略图,“image/jpg”);
}
返回文件(Url.Content(“~/Content/images/video placeholder.jpg”),
“图像/jpg”);
}
//看法
foreach(在(IEnumerable)视图数据[“视频菜单”]中的var v)
{
} 
是,但仍然只有一个图像(imageid=1)显示循环次数..而不是所有其他图像