asp.net-mvc-3 – 在Razor/MVC3中显示数据库映像(bytes [])?

前端之家收集整理的这篇文章主要介绍了asp.net-mvc-3 – 在Razor/MVC3中显示数据库映像(bytes [])?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我从我的MS sql 2008R2数据库返回一个数据集,其中包含一个数据表,我已经从我的Razor视图获取数据。我添加了一个字节[]字段,其中包含我在该视图上显示的图像缩略图

由于字节数组相对较小,我想我会尝试显示字节数组的内联。不过阅读后可能会有一些与浏览器有关的问题,我放弃了这一点。

创建一个控制器方法似乎是要走的路,(这两个方法都找到了here),但是我已经有字节数组准备好在我的视图,而不需要再进行另一个数据库调用获取它的ID。

做这个,不明显的原因:

…在页面显示其他数据….

@if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] == null)
{
    <img src="@Url.Content("~/Content/Images/NoPhoto.png")" border="0" />
}
else
{
    <img src="@Url.Action("GetImage","SearchResults",new { imageBytes = Model.dsResults.Tables[0].Rows[i]["ImageBytes"] })" alt="Product Image" />
}

… …

控制器方式:

[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetImage(byte[] imageBytes)
{
    byte[] byteArray = imageBytes;
    return new FileContentResult(byteArray,"image/jpeg");
}

…因为这本质上是尝试通过http发送字节数组。

所以,我的问题是,由于我已经在我的Razor视图中有字节数组,我该如何显示

– 更新 –

我意识到,不建议在视图中进行处理,但是由于数据已经存在,所以不能这样做:

Response.Write((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]);

要么…

Stream s = new MemoryStream(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
System.Drawing.Image img = new System.Drawing.Bitmap(s);

在其他帖子中,我已经看到你做了一个Response.Write(byte [] …)),但是在这种情况下这不行。

– UPADATE –

在我不断寻求效率(不需要再提出数据库)的情况下,WebImage帮手似乎是一个很好的候选人。其中一个构造函数将接受一个字节数组来初始化该类,然后使用.Write(“jpeg”)方法,我可以看到该图像。

<td>
    @{
        WebImage webImage = new WebImage(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
        webImage.Write("jpeg");
    }
</td>

使用WebImage.Write()的问题是,一旦使用,该图像是在页面上呈现的唯一的东西。有没有办法将其直接渲染到剃须刀视图页面上的“控件”?

– 更新 –

这继续bug我…所以我尝试了以下,我认为可能会工作,因为这是我们正在做的行动…

if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] != DBNull.Value)
{
    var img1 = new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]),"image/jpeg");
    <text>
        <img src="@new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]),"image/jpeg")" />
    </text>
}

…不行

解决方法

Model.Content是一个byte []图像。
@{
    string imageBase64 = Convert.ToBase64String(Model.Content);
    string imageSrc = string.Format("data:image/gif;base64,{0}",imageBase64);
}

这样使用

<img src="@imageSrc" alt="@Model.Name" width="100" height="100" />

猜你在找的asp.Net相关文章