Asp.net mvc 通过一次调用在MVC中渲染图像以获得聚合的最佳实践是什么

Asp.net mvc 通过一次调用在MVC中渲染图像以获得聚合的最佳实践是什么,asp.net-mvc,image,viewmodel,Asp.net Mvc,Image,Viewmodel,我有一个问题,我想听听你的意见。我完全理解不能直接从viewmodel渲染图像(字节[])。我知道我需要一个id来表示视图模型中的图像 将viewmodel绑定到视图后,我可以执行以下操作: <img src="@Url.Action("GetPhoto", new { photoId = Model.PhotoId })" /> 但是,我有一个对第三方web服务的调用(我不控制它),我调用该服务来获取填充我的viewmodel的聚合。像这样的事情: -Vehicle -Veh

我有一个问题,我想听听你的意见。我完全理解不能直接从viewmodel渲染图像(字节[])。我知道我需要一个id来表示视图模型中的图像

将viewmodel绑定到视图后,我可以执行以下操作:

<img src="@Url.Action("GetPhoto", new { photoId = Model.PhotoId })" />
但是,我有一个对第三方web服务的调用(我不控制它),我调用该服务来获取填充我的viewmodel的聚合。像这样的事情:

-Vehicle
  -VehicleId
  -VehicleName
  -VehicleImage byte[] <=======
  -VehicleServiceHistory
    -ServiceHistoryId
    -SericeType
    -ServiceTitle
public ActionResult GetPhoto(int photoId()
{
    byte[] photo = GetPhotoFromDb(photoId);
    return File(photo, "image/jpeg"); 
}
但是我想在这个操作中使用聚合中已经提供的映像,而不必再次调用该服务

期待听到你的建议

谢谢 罗斯

注意:这篇文章已经在这里发表了几个星期了,肯定有人有意见!!:(

我完全理解不能直接从viewmodel渲染图像(字节[])

实际上,如果浏览器支持以下功能,您可以:



除此之外,剩下的选择不多。在两次HTTP调用之间,您必须将映像保留在服务器上的某个位置。我祝贺您不希望将会话用于此目的。它不是用于此目的的正确存储。一种可能是将映像保留在服务器上的某个文件夹上(如果在Web场上运行,则为共享文件夹)然后仅按id引用图像。因此,基本上,您将在基础结构上缓存远程图像。您可以使用一些计划脚本删除比您可以定义的某个日期更早的文件。

答案是,您必须填充视图模型,其中包含要渲染的图像的id。

渲染viewmodel后,必须调用另一个控制器操作,如下所示:

-Vehicle
  -VehicleId
  -VehicleName
  -VehicleImage byte[] <=======
  -VehicleServiceHistory
    -ServiceHistoryId
    -SericeType
    -ServiceTitle
public ActionResult GetPhoto(int photoId()
{
    byte[] photo = GetPhotoFromDb(photoId);
    return File(photo, "image/jpeg"); 
}
经过大量调查,似乎这就是它的方式,除非所有浏览器都支持数据URI方案

<img src="data:image/jpeg;base64,@Html.Raw(Convert.ToBase64String(Model.VehicleImage))" />


希望这能有所帮助。

嗨,达林,使用
转换有什么用。FromBase64String
,它能优化图像以在站点中更快地加载吗?
public ActionResult GetPhoto(int photoId()
{
    byte[] photo = GetPhotoFromDb(photoId);
    return File(photo, "image/jpeg"); 
}
<img src="data:image/jpeg;base64,@Html.Raw(Convert.ToBase64String(Model.VehicleImage))" />