通过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(); } Chart 

在控制器中

  public ActionResult RenderChart() { MemoryStream ms = TempData["Chart"] as MemoryStream; return File(ms.ToArray(), "image/jpeg"); } 

尽管工作正常,但这对我来说似乎有点讨厌,尤其是使用TempData

有没有更好的办法?

acedemic方式是在RenderChart操作中再次检索模型对象并将图表图像返回到视图。

但我认为这是将图像存储在TempData以减少数据库往返和提高性能的有效方法。

也许它甚至没有必要改善性能。 第二次读取数据库时,数据库将在其高速缓存中提供数据,并且用户可能无法再注意再次获取数据所需的额外10ms。

至少TempData似乎是正确的存储,因为当RenderChart操作读取时,该值将从集合中删除。