将字节数组转换为图像并在剃刀视图中显示

我使用EF 4.1 Code First ,为了简单起见,假设我有以下实体类:

public class Person { public int Id { get; set; } public string Name { get; set; } public Byte[] Image { get; set; } } 

我已经设法创build一个工作的创build视图,允许添加一个Person对象到数据库中。

但是,当我来显示一个人的细节,我被卡在显示图像 。 在Googlesearch了好几个小时后,我有以下几点:

 // 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]属性返回空

我将不胜感激一些帮助让我的图像显示。

谢谢。

瓷碗。

喜欢这个:

 <img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" /> 

您需要Url.Action而不是Html.Action因为您只需要为GetImg操作生成一个url。 Html.Action做了完全不同的事情。

如果您已经在您的模型中加载了图像,还有更简单的方法:

 <img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" /> 

这样做,您不需要再次访问服务器,只需从数据库中获取图像byte[]

我发现在Razor MVC页面中从Model属性显示dynamic加载的SVG图像的最好方法是将Html.DisplayFor(..)与.ToHTMLString()组合使用。 对于我的情况,有一个基本的64 SVG图像+ XML数据string存储在名为图像的模型属性。 这是我的代码:

 <img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' /> 

这似乎是我能够在Chrome,FireFox和IE中正确显示SVG图像的唯一方法。

干杯