通过MVC3中的TempData将MemoryStream转换为IMG – 有更好的方法吗?
除了其他属性之外,模型还包含将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(); }
在控制器中
public ActionResult RenderChart() { MemoryStream ms = TempData["Chart"] as MemoryStream; return File(ms.ToArray(), "image/jpeg"); }
尽管工作正常,但这对我来说似乎有点讨厌,尤其是使用TempData
有没有更好的办法?
acedemic方式是在RenderChart
操作中再次检索模型对象并将图表图像返回到视图。
但我认为这是将图像存储在TempData
以减少数据库往返和提高性能的有效方法。
也许它甚至没有必要改善性能。 第二次读取数据库时,数据库将在其高速缓存中提供数据,并且用户可能无法再注意再次获取数据所需的额外10ms。
至少TempData
似乎是正确的存储,因为当RenderChart
操作读取时,该值将从集合中删除。