将字节数组转换为Razor视图中的图像和显示

J86*_*J86 39 asp.net-mvc image bytearray razor asp.net-mvc-3

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

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public Byte[] Image { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

但是,当我来显示一个人的细节时,我会卡在显示图像上.在谷歌搜索了几个小时后,我有以下内容:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

在我试图列出人员详细信息的视图中,我有以下内容来显示图像:

<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
Run Code Online (Sandbox Code Playgroud)

但是上面的方法不起作用,我的图像源[src]属性返回空.

非常感谢帮助我显示图像.

谢谢.

瓷碗.

Len*_*rri 59

如果您已经碰巧在模型中加载了图像,那么有一种更简单的方法:

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

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


Dar*_*rov 36

像这样:

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

你需要Url.Action而不是Html.Action因为你只想生成一个GetImg动作的URL .Html.Action做了完全不同的事情.

  • 真棒,现在似乎工作,**谢谢Darin**:) (2认同)