FileContentResult 在没有特定控制器操作的情况下呈现在视图中

gon*_*lov 0 view filecontentresult asp.net-mvc-3

我在从数据库获取的控制器中执行相同的操作,例如具有姓名、年龄、图像(字节 [])的员工。

所以我将信息存储在 ViewBag 中。然后在查看图像的具体代码是:

<img src="@ViewBag.Image" alt="Logo" />
Run Code Online (Sandbox Code Playgroud)

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

<img src="System.something.FileContentResult" alt="Logo" />
Run Code Online (Sandbox Code Playgroud)

我见过很多从控制器中的特定操作获取 FileContentResult 的示例,例如:

(代码仅为示例)

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

然后渲染图像:

<img src="@Url.Action("GetEmployeeImage", "Home", new { id = ViewBag.Id })" alt="Em" />
Run Code Online (Sandbox Code Playgroud)

但我不想要那个,因为我已经有了图像。

如何将其渲染到视图抛出 ViewBag?

谢谢!

PD:在视图中渲染图像是相同的,但尚未结束

Dar*_*rov 5

一种可能性是使用数据 URI 方案。请记住,这仅适用于支持它的浏览器。这个想法是你将图像数据作为 base64 字符串嵌入到标签的src属性中img

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

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