我正在使用 EF 4.1 Code First ,为了简单起见,假设我有以下实体类:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Byte[] Image { get; set; }
}
我设法创建了一个可用的创建视图,允许将Person对象添加到数据库中。
但是当我来显示一个人的详细信息时,我 卡在显示图像 上。在Google搜索了几个小时后,我有以下内容:
// To convert the Byte Array to the author Image
public FileContentResult getImg(int id)
{
byte[] byteArray = DbContext.Persons.Find(id).Image;
return byteArray != null
? new FileContentResult(byteArray, "image/jpeg")
: null;
}
在我试图列出人员详细信息的视图中,我有以下内容来显示图像:
<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
但是上面无效,我的图片来源 [src]属性返回空。
我会 非常感谢帮助 让我的图片显示。
谢谢。
磁碗。
答案 0 :(得分:59)
如果您已经碰巧在模型中加载了图像,那么有一种更简单的方法:
<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" />
这样,您不需要再次访问服务器只是为了从数据库中获取图像byte[]
。
答案 1 :(得分:35)
像这样:
<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
您需要Url.Action
而不是Html.Action
,因为您只想生成GetImg
操作的网址。 Html.Action
执行了entirely different。
答案 2 :(得分:0)
我发现从Razor MVC页面中的Model属性显示动态加载的SVG图像的最佳方法是将Html.DisplayFor(..)与.ToHTMLString()结合使用。对于我的情况,有一个base 64 SVG Image + XML数据字符串存储在名为Image的model属性中。这是我的代码:
<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' />
这似乎是我能够在Chrome,FireFox和IE中正确显示SVG图像的唯一方式。
干杯