Asp.net mvc 通过一次调用在MVC中渲染图像以获得聚合的最佳实践是什么
我有一个问题,我想听听你的意见。我完全理解不能直接从viewmodel渲染图像(字节[])。我知道我需要一个id来表示视图模型中的图像 将viewmodel绑定到视图后,我可以执行以下操作: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
<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))" />