MemoryStream для IMG через TempData в MVC3 - есть ли лучший способ? - PullRequest
1 голос
/ 03 ноября 2011

Модель содержит, помимо других свойств, метод, который возвращает MSChart как MemoryStream.

В моем представлении я копирую MemoryStream в TempData ["Chart"], а затем использую URL.Action () длявызовите действие контроллеров для возврата FileContentResult, используя MemoryStream из TempData.

в модели

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 голосов
/ 04 ноября 2011

Способ acedemic состоит в том, чтобы снова извлечь объект модели в действии RenderChart и вернуть изображение диаграммы в представление.

Но я думаю, что это правильный подход для храненияизображение в TempData для уменьшения количества обращений к базе данных и повышения производительности.

Может быть, это даже не нужно для улучшения производительности.База данных будет иметь данные в своем кэше при чтении во второй раз, и дополнительные 10 мс, необходимые для повторного извлечения данных, могут быть незаметны для пользователя.

По крайней мере, TempData кажется правильнымсохранить, поскольку значение удаляется из коллекции при его чтении с помощью действия RenderChart.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...