将字节数组转换为图像并在剃刀视图中显示
我使用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图像的唯一方法。
干杯