内存流到IMG通过TempData在MVC3 -有更好的方法
本文关键字:更好 方法 MVC3 IMG 通过 TempData 内存 | 更新日期: 2023-09-27 18:13:09
在其他属性中,模型包含一个方法,该方法返回一个MSChart作为MemoryStream。
在我的视图中,我将MemoryStream复制到TempData["Chart"],然后使用URL.Action()调用控制器的动作,使用TempData中的MemoryStream返回FileContentResult。
模型
public MemoryStream ViewerChart()
{
Chart chart = new Chart();
:
:
using (MemoryStream memStream = new MemoryStream())
{
chart.SaveImage(memStream, ChartImageFormat.Jpeg);
return memStream;
}
}
View
@{
TempData["Chart"]= Model.ViewerChart();
}
<img alt="Chart" src="@Url.Action("RenderChart")" />
在控制器
public ActionResult RenderChart()
{
MemoryStream ms = TempData["Chart"] as MemoryStream;
return File(ms.ToArray(), "image/jpeg");
}
尽管工作正常,但这一切对我来说似乎有点讨厌,特别是使用TempData
有更好的方法吗?
学术方法是在RenderChart
操作中再次检索模型对象,并将图表图像返回给视图。
但我认为这是一种有效的方法,将图像存储在TempData
中,以减少数据库往返并提高性能。
也许甚至没有必要提高性能。当数据库第二次读取数据时,它的缓存中会有可用的数据,并且再次读取数据所需的额外10ms可能不会被用户注意到。
至少TempData
似乎是正确的存储,因为当RenderChart
操作读取该值时,该值将从集合中删除。