0

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

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

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

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

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

我已经看到了很多从控制器中的特定操作获取 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:在视图中渲染图像是一样的,但没有得出结论

4

2 回答 2

5

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

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

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

于 2012-05-09T05:55:57.410 回答
0

根据@darin 的回答,如果有人想通过调用控制器的操作来实现:

      public FileContentResult GetFileByID(string ID)
    {
        try
        {
            // Get the object from the db
                Ent ent = Biz.GetPatientsByID(ID);
               // Convert the path to byte array (imagepath is something like: \\mysharedfolder\myimage.jpg
                byte[] doc = EFile.ConvertToByteArray(ent.ImagePath);
                string mimeType = File(doc, MimeMapping.GetMimeMapping(Path.GetFileName( ent.ImagePath))).ContentType;
                Response.AppendHeader("Content-Disposition", "inline; filename=" + Path.GetFileName(ent.ImagePath));
                return File(doc, mimeType);

   

        }
        catch (Exception ex)
        {

            throw ex;
        }

}

在前端:

                        <img id="ItemPreview" src="@Url.Action("GetFileByID","Patient", new {ID= Model.ID })" alt="" width="350" height="350" />

其中 Patient 是控制器名称。

于 2021-11-09T12:46:17.103 回答