FileContentResult在View中呈现,没有特定的Controller Action

时间:2012-05-09 01:39:26

标签: asp.net-mvc-3 view filecontentresult

我在从db获取的控制器中有相同的操作,例如具有名称,年龄,图像(byte [])的Employee。

所以我将信息存储在ViewBag中。然后在视图中,图像的特定代码是:

<img src="@ViewBag.Image" alt="Logo" />

但是当我看到我的回复内容时:

<img src="System.something.FileContentResult" alt="Logo" />

我看过很多例子从Controller中的特定Action获取FileContentResult,例如:

(该代码仅为示例)

public ActionResult GetEmployeeImage (int id){
    byte[] byteArray = GetImageFromDB(id);
    FileContentData file = new File (byteArray,"image/jpg");
    return file;
}

然后使用:

渲染图像
<img src="@Url.Action("GetEmployeeImage", "Home", new { id = ViewBag.Id })" alt="Em" />

但我不想那样,因为我已经拥有了这张照片。

如何将其呈现给View抛出ViewBag?

谢谢!

PD:Rendering image in a View是相同的,但没有结束

1 个答案:

答案 0 :(得分:4)

一种可能性是使用data URI scheme。请记住,这只适用于支持它的浏览器。我们的想法是,您将图像数据作为base64字符串嵌入src标记的img属性中:

<img src="data:image/jpg;base64,@(Html.Raw(Convert.ToBase64String((byte[])ViewBag.Image)))" alt="" />

另一方面,如果您想要一个适用于所有浏览器的解决方案,则必须使用控制器操作来提供图像。因此,在初始请求中,仅获取员工的id,name和age属性,而不是图像。然后编写一个控制器操作,将employee id作为参数,查询数据库,获取相应的图像并将其作为文件结果返回。然后在视图内部将img标记的src属性指向此控制器操作。