除了其他属性之外,Model还包含一个将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;
}
}
在视图中
@{
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
有更好的方法吗?
答案 0 :(得分:0)
acedemic 方式是在RenderChart
操作中再次检索模型对象,并将图表图像返回到视图。
但我认为这是将图像存储在TempData
中以减少数据库往返和提高性能的有效方法。
也许甚至没有必要改善性能。第二次读取数据库时,数据库将在其缓存中提供数据,并且用户可能无法再注意再次获取数据所需的10ms。
至少TempData
似乎是正确的商店,因为在RenderChart
操作读取时,该值会从集合中删除。