Asp.net mvc 在MVC中检索一组二进制图像
我的图像存储在ASP.NET 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
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)显示循环次数..而不是所有其他图像