通过MVC3中的TempData将MemoryStream转换为IMG - 有更好的方法吗?

时间:2011-11-03 14:43:44

标签: c# asp.net-mvc asp.net-mvc-3

除了其他属性之外,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

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

至少TempData似乎是正确的商店,因为在RenderChart操作读取时,该值会从集合中删除。