内存流到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

有更好的方法吗?

内存流到IMG通过TempData在MVC3 -有更好的方法

学术方法是在RenderChart操作中再次检索模型对象,并将图表图像返回给视图。

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

也许甚至没有必要提高性能。当数据库第二次读取数据时,它的缓存中会有可用的数据,并且再次读取数据所需的额外10ms可能不会被用户注意到。

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