Vous pouvez utiliser les contrôles graphiques de deux manières :
Générer l'image à partir d'un contrôleur
En générant le graphique et en le renvoyant sous forme d'image à partir d'une action (ce à quoi Chatuman fait référence, je pense) :
Chart chart = new Chart();
chart.BackColor = Color.Transparent;
chart.Width = Unit.Pixel(250);
chart.Height = Unit.Pixel(100);
Series series1 = new Series("Series1");
series1.ChartArea = "ca1";
series1.ChartType = SeriesChartType.Pie;
series1.Font = new Font("Verdana", 8.25f, FontStyle.Regular);
series1.Points.Add(new DataPoint {
AxisLabel = "Value1", YValues = new double[] { value1 } });
series1.Points.Add(new DataPoint {
AxisLabel = "Value2", YValues = new double[] { value2 } });
chart.Series.Add(series1);
ChartArea ca1 = new ChartArea("ca1");
ca1.BackColor = Color.Transparent;
chart.ChartAreas.Add(ca1);
using (var ms = new MemoryStream())
{
chart.SaveImage(ms, ChartImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return File(ms.ToArray(), "image/png", "mychart.png");
}
Style WebForms
De cette façon, il vous suffit d'inclure le graphique dans vos vues .aspx (comme avec les formulaires web traditionnels). Pour cela, vous devez ajouter les éléments pertinents dans votre web.config.
<controls>
...
<add tagPrefix="asp"
namespace="System.Web.UI.DataVisualization.Charting"
assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</controls>
<httpHandlers>
...
<add path="ChartImg.axd"
verb="GET,HEAD"
validate="false"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</httpHandlers>
<handlers>
...
<add name="ChartImageHandler"
preCondition="integratedMode"
verb="GET,HEAD"
path="ChartImg.axd"
type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</handlers>
Vous ne pouvez pas exécuter de code à l'intérieur des éléments DataPoint lors de la construction du graphique, donc pour connecter vos données vous aurez besoin d'une méthode dans la classe View. Cela fonctionne bien pour moi. En travaillant de cette manière, le contrôle rend une URL vers une image générée par le gestionnaire http du contrôle du graphique. Dans votre déploiement, vous devrez fournir un dossier accessible en écriture pour la mise en cache des images.
* Support VS 2010 / .NET 4 *
Pour que cela fonctionne dans .NET 4, vous devez modifier les références de la carte à la version 4.0.0.0 avec le jeton de clé publique approprié.
Il semble également que le contrôle du graphique génère maintenant des urls vers le chemin de la requête en cours plutôt que vers la route de la requête. Pour moi, cela signifie que toutes les demandes de graphiques ont donné lieu à des erreurs 404 car /{Controller}/ChartImg.axd
et équivalents ont été bloqués par des routes. Pour corriger cela, j'ai ajouté des appels IgnoreRoute supplémentaires qui couvrent mes usages - une solution plus générale serait meilleure :
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/ChartImg.axd/{*pathInfo}");
routes.IgnoreRoute("{controller}/{action}/ChartImg.axd/{*pathInfo}");
...