Click here to Skip to main content
13,594,656 members
Click here to Skip to main content
Add your own
alternative version


45 bookmarked
Posted 6 Mar 2009
Licenced CPOL

Streaming Chart Images as FileResult from MVC Controllers

, 10 Mar 2009
Rate this:
Please Sign up or sign in to vote.
Using a proper MVC pattern to stream an image from Microsoft Chart controls for the Microsoft .NET Framework 3.5.



Not a lot of server controls play nicely with the ASP.NET MVC framework; Microsoft Chart does. To implement a true MVC design pattern, the Controller should relate to the View any dependencies from the Model (data). This project shows how the Microsoft Chart controls can be streamed from the Controller into an MVC View. The article assumes a basic knowledge of the ASP.NET MVC framework (Dino Esposito article here) and the restrictions associated with using server controls (no control-level events in the code-behind and the control won’t be able to postback).


The use of the Microsoft Chart in the MVC framework is fairly well documented. Code-Inside Blog International gives a good introduction here. The author's examples have been included on the first two links on the default page of the project. Reading the responses to the article, I stumbled onto an interesting post by Florian (January 18 2009 @ 10:46 pm). He states:

A third option that works very well is to have the following code in your ASPX:

<img src="/Product/GetChart" alt="Chart" />

This calls the GetChart action on the myProduct controller. The action creates a chart in memory, saves the chart as an image to a temp folder, and then streams the image of the chart to the client. By the way, the action returns a FileResult.

The main advantage of this third method is that it does not require the ASPX page to have any ASP server controls, and subsequently no code-behind is needed.

I looked into FileResult (derived from ActionResult) and found an interesting article on :: Keith J. Farmer's blog here. Adopting this code, I quickly found the overload for the Chart.SaveImage that used a stream and plugged it all together (see below).

The View code:


The Controller code:


Using the code

To run the project, the following components must be installed:

To use the mechanisms discussed in this article in your own project, you will need these additional steps:

  • add the sections shown in the Code-Inside Blog International article to the web.config.
  • add the chart or img markup (depending on the approach).
  • add the code-behind (method 2) or the controller methods (method 3).
  • include the FileResult class, if using method 3.

The examples shown are simplified, and do not draw data from a database.

Points of interest

The streaming of the image plugged nicely into the Chart API - they catered for this Use Case. On the downside, the data-binding on this release of the Microsoft Chart Controls for Microsoft .NET Framework 3.5 is quite primitive and is not LINQ or Entity friendly.


  • 2009-Mar-09 - Typos and source-code update.
  • 2009-Mar-05 - First submission.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Software Developer Encore Software
Australia Australia
Contractor in Desktop and Web applications.
Gold Coast, Queensland.

You may also be interested in...


Comments and Discussions

GeneralHow To Create Dynamic Google Column Chart In an Asp.Net MVC Using C# and Javascript Pin
Binu19854-Jul-14 23:57
memberBinu19854-Jul-14 23:57 
GeneralAjax and multiple graphs Pin
salmoliv28-Sep-10 14:47
membersalmoliv28-Sep-10 14:47 
GeneralThis rules! [modified] Pin
Karsten Januszewski3-Mar-10 11:24
memberKarsten Januszewski3-Mar-10 11:24 
GeneralVisual Basic Version of the article needed! Pin
phillipparrin15-Dec-09 8:53
memberphillipparrin15-Dec-09 8:53 
GeneralRe: Visual Basic Version of the article needed! Pin
Nic_Roche15-Dec-09 11:36
memberNic_Roche15-Dec-09 11:36 
QuestionWhat if i have to show tooltips in the charts?? Pin
M Ali Raza11-Aug-09 0:40
memberM Ali Raza11-Aug-09 0:40 
AnswerRe: What if i have to show tooltips in the charts?? Pin
Nic_Roche11-Aug-09 10:25
memberNic_Roche11-Aug-09 10:25 
QuestionASP.Net + MVC + Chart Drill Down Pin
Jaisrinivasan29-Jul-09 4:26
memberJaisrinivasan29-Jul-09 4:26 
AnswerRe: ASP.Net + MVC + Chart Drill Down Pin
Nic_Roche29-Jul-09 10:42
memberNic_Roche29-Jul-09 10:42 
GeneralSource code file not available to download Pin
ptpatil24-Jun-09 18:38
memberptpatil24-Jun-09 18:38 
GeneralRe: Source code file not available to download Pin
Nic_Roche29-Jul-09 10:43
memberNic_Roche29-Jul-09 10:43 
GeneralMVC RC2 Pin
Richard Deeming10-Mar-09 9:26
memberRichard Deeming10-Mar-09 9:26 
GeneralRe: MVC RC2 Pin
Nic_Roche10-Mar-09 20:53
memberNic_Roche10-Mar-09 20:53 
GeneralRe: MVC RC2 Pin
Richard Deeming11-Mar-09 3:01
memberRichard Deeming11-Mar-09 3:01 
GeneralRe: MVC RC2 Pin
Nic_Roche11-Mar-09 20:59
memberNic_Roche11-Mar-09 20:59 
> it may be "better" to define a separate ChartResult class to render the chart to the response

I agree; will modify project with next update.
GeneralRe: MVC RC2 Pin
Nic_Roche11-Mar-09 21:00
memberNic_Roche11-Mar-09 21:00 
GeneralNice Approach Pin
ericness8-Mar-09 18:08
memberericness8-Mar-09 18:08 
GeneralRe: Nice Approach Pin
Nic_Roche9-Mar-09 1:28
memberNic_Roche9-Mar-09 1:28 
QuestionNice work Pin
kraftspl8-Mar-09 0:30
memberkraftspl8-Mar-09 0:30 
AnswerRe: Nice work [modified] Pin
Nic_Roche8-Mar-09 1:18
memberNic_Roche8-Mar-09 1:18 
GeneralRe: Nice work Pin
kraftspl9-Mar-09 10:18
memberkraftspl9-Mar-09 10:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01 | 2.8.180621.3 | Last Updated 10 Mar 2009
Article Copyright 2009 by Nic_Roche
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid