web-dev-qa-db-fra.com

Cartographie dans ASP.Net MVC 3 

J'utilise Chart Web Helper dans ASP.Net MVC 3. J'ai vu une gamme d'images brillantes en ligne montrant les capacités de cette API, mais il n'existe pratiquement aucune documentation sur la manière de styliser les graphiques. Par exemple, je dois afficher des étiquettes en dehors du graphique, j'aimerais spécifier un pourcentage plutôt que des valeurs décimales, etc. 

Il existe un projet de formulaires Web à télécharger: http://weblogs.asp.net/scottgu/archive/2010/02/07/built-in-charting-controls-vs-2010-and-net-4-series. aspx et une documentation de classe très simple qui explique comment affecter des valeurs et spécifier des dimensions de base.

Je comprends qu'aucun livre n'a encore été publié sur MVC 3, mais il devrait sûrement y avoir une sorte de documentation expliquant comment utiliser l'outil.

Je vous remercie

MODIFIER:

D'après ce que j'ai lu, ASP.Net MVC 3 a pris du recul avec l'outil de graphique en supprimant la possibilité de créer des graphiques de style ou n'a pas été documenté du tout. Entré dans cet article: http://forums.asp.net/t/1620783.aspx/1?ASP+NET+MVC+3+Beta+Chart+Helper+Styling+Please+Help+ , très similaire le problème y est décrit. 

EDIT 2: Il semble que Microsoft ait partiellement implémenté la fonctionnalité MSCharts dans MVC 3. Pour pouvoir utiliser MSCharts, l'assembly System.Web.DataVisualization Assembly doit être importé et enregistré dans le fichier web.configuration. T

De cette façon, les demandes sont envoyées de la vue aux contrôleurs. Les contrôleurs génèrent l'image d'un graphique et transmettent un résultat d'image. Le résultat est ensuite affiché dans la vue. Ceci est utile car il fournit une sorte de séparation. Je ne comprends toujours pas pourquoi System.WebHelpers.Chart n'offre pas déjà cette fonctionnalité, mais j'espère qu'elle sera corrigée dans un proche avenir. 

EDIT 3: Peu de remarques à faire. Ne construisez pas vos graphiques dans la vue - ils devraient être servis par un contrôleur. Si vous décidez d'utiliser des vues pour construire des graphiques, assurez-vous de mettre à jour web.config dans le dossier Views pour inclure <add namespace="System.Web.UI.DataVisualization"/> dans la section d'espace de nom. Les noms des assemblys et des espaces de noms prêtent à confusion. Assembly s'appelle: System.Web.DataVisualization lorsque l'espace-noms s'appelle System.Web.UI.DataVisualization. Enfin, je pense que l’API de création de graphiques est excellente, elle sert des images, ce qui signifie que les graphiques seront accessibles à partir de tous les navigateurs Web. La qualité des cartes est excellente. J'ai examiné des alternatives telles que les graphiques Fusion, HighCharts et quelques autres graphiques utilisant jQuery/JavaScript/Flash. Ils essaient tous de vous prendre entre 300 et 1 000 £ sans essayer de répondre aux besoins les plus élémentaires des développeurs. 

21
user338195

Les contrôles de graphique sont basés sur un projet précédemment séparé appelé MS Chart. 

Le blog d'Alex Gorev (développeur principal de MSFT pour le projet): http://blogs.msdn.com/b/alexgor/

Forums MS Chart: http://social.msdn.Microsoft.com/Forums/en-US/MSWinWebChart/

Documentation sur MSDN: http://msdn.Microsoft.com/en-us/library/dd456632(VS.100).aspx

Les publications semblent un peu dépassées, mais l'API est à peu près la même entre MS Chart et les nouvelles bibliothèques de visualisation de données.

Pour répondre à vos exemples de questions:

1) Pour afficher les étiquettes en dehors du graphique, chaque objet Series possède un tableau de propriétés dans le dictionnaire.

series["PieLabelStyle"] = "Outside";

2) Pour spécifier des pourcentages plutôt que des valeurs brutes, la propriété Label de l'objet Series prend une chaîne de mise en forme.

series.Label = "#PERCENT{P0}"

Ces attributs personnalisés sont disponibles en détail à http://msdn.Microsoft.com/en-us/library/dd456764.aspx .

EDIT: Ajouter un exemple de code

Ok, voici un exemple de code complet. J'utilise System.Web.DataVisualization v4.0.0.0, ce qui devrait donc être à jour avec MVC 3. La series indiquée ci-dessus n'est pas la propriété réelle Chart.Series (c'est une SeriesCollection). C'est la personne series que vous ajoutez à cette collection.

public ActionResult TestForSOExample()
{
  // slug in some data
  var data = new Dictionary<string, float>
        {
            {"test", 10.023f},
            {"test2", 20.020f},
            {"test3", 19.203f},
            {"test4", 4.039f},
            {"test5", 5.343f}
    };


  var chart = new Chart();

  var area = new ChartArea();
  // configure your chart area (dimensions, etc) here.
  chart.ChartAreas.Add(area);

  // create and customize your data series.
  var series = new Series();
  foreach (var item in data)
  {
        series.Points.AddXY(item.Key, item.Value);
    }
  series.Label = "#PERCENT{P0}";
  series.Font = new Font("Segoe UI", 8.0f, FontStyle.Bold);
  series.ChartType = SeriesChartType.Pie;
  series["PieLabelStyle"] = "Outside";

  chart.Series.Add(series);

  var returnStream = new MemoryStream();
  chart.ImageType = ChartImageType.Png;
  chart.SaveImage(returnStream);
  returnStream.Position = 0;
  return new FileStreamResult(returnStream, "image/png");
}

Lorsque vous appelez l'action du contrôleur, les images suivantes vous sont présentées.

example image from controller action

35
David Longnecker

Je recommanderais de rendre les graphiques sur le client, plutôt que de créer sur le serveur, le serveur est en fait devrait être utilisé pour extraire les données. J'utiliserais qch comme google charts pour ça. Mais si vous êtes vraiment décidé à extraire des graphiques du serveur, les images doivent être spécifiques, le plus simple consiste à utiliser l'approche ci-dessus - Classe Chart. Mais un inconvénient de cette approche est qu’il n’existe aucun concepteur pour cela, mais en fait, comme je l’ai découvert, si vous créez l’application WinForms et que vous faites glisser le contrôle des graphiques, c Il est nécessaire de copier/coller le code généré par le concepteur et d'écrire une logique de traitement, si nécessaire. Cela rend la vie beaucoup plus facile.

0
Marcello