web-dev-qa-db-fra.com

Microsoft Charting, MVC 3 et Razor

Lié à Ce sujet Je me demande si quelqu'un a fait fonctionner la bibliothèque Microsoft Charting avec Asp MVC 3 et Razor.

Je connais le nouvel assistant de création de graphiques, mais comme il est très limité, ce n'est pas vraiment une option.

Créer une méthode d'action qui renvoie une image est également assez simple, mais puisque toute l'interactivité est interrompue (même de simples info-bulles pour les barres d'un graphique à barres), cette méthode présente plusieurs limites.

Cet exemple est probablement l'article le plus utile que j'ai trouvé, mais je n'arrive toujours pas à faire fonctionner un seul graphique facile même s'il fonctionne lors du rendu de l'image uniquement dans une méthode d'action. De plus, les échantillons fonctionnent correctement sous .net 4, mais ces échantillons ne sont évidemment pas MVC.

SO - Quelqu'un a-t-il permis à Microsoft de travailler pleinement dans Asp MVC 3 avec Razor et pourrait-il publier un lien vers une solution complète?

35
Victor

Si vous recherchez une info-bulle et un zoom avant, voici un exemple. J'ai essayé et travaillé comme un charme pour moi. Vous devez avoir ImageMap lié à votre image pour avoir de l'interactivité.

Graphiques MVC avec interactivité

14
Sarath

J'ai passé quelques jours à chercher une solution qui crée des graphiques interactifs dans MVC, mais tous les exemples que j'ai vus étaient bien plus compliqués qu'ils ne le devraient.

La réponse de Sarath est presque parfaite, mais elle enregistre l'image deux fois, ce qui n'est pas très efficace. Avec la fonction Html.RenderAction (), nous pouvons tout faire en un seul passage et le rendre aussi efficace que possible.

Voici la solution que j'ai trouvée:

http://blog.smirne.com/2012/09/creating-interactive-charts-with-aspnet.html

Je n'ai vu aucune solution qui puisse tout faire en un seul passage. La meilleure partie de ceci est qu'il ne nécessite aucune modification du fichier web.config. Il n'essaye pas non plus d'utiliser un contrôle ASP.net dans MVC. C'est de la pure technologie MVC.

[~ # ~] mise à jour [~ # ~]

Voici le code comme demandé:

MANETTE:

public ActionResult Chart()
{
    var chart = buildChart();
    StringBuilder result = new StringBuilder();
    result.Append(getChartImage(chart));
    result.Append(chart.GetHtmlImageMap("ImageMap"));
    return Content(result.ToString());
}

Fonctions utilitaires:

private Chart buildChart()
{
    // Build Chart
    var chart = new Chart();

    // Create chart here
    chart.Titles.Add(CreateTitle());
    chart.Legends.Add(CreateLegend());
    chart.ChartAreas.Add(CreateChartArea());
    chart.Series.Add(CreateSeries());

    return chart;
}

private string getChartImage(Chart chart)
{
    using (var stream = new MemoryStream())
    {
       string img = "<img src='data:image/png;base64,{0}' alt='' usemap='#ImageMap'>";
       chart.SaveImage(stream, ChartImageFormat.Png);
       string encoded = Convert.ToBase64String(stream.ToArray());
       return String.Format(img, encoded);
    }
}

VUE:

@{ Html.RenderAction("Chart"); }
12
smirne

Voici une solution complète sur CodeProject utilisant ASP.NET MVC 2 et les contrôles Microsoft Charting:

C'est probablement aussi bon que pour le moment (au moins je n'ai rien trouvé qui corresponde mieux à vos besoins), car ASP.NET MVC 3 est toujours juste RTM et le rasoir aussi De toute façon, le faire migrer d'ASP.NET MVC 2 vers 3 n'est pas un problème. Passer du moteur de vue à rasoir serait un peu plus difficile, mais le concept global reste le même.

Je dirais "allez-y" et lorsque vous rencontrez un problème concret ou avez une question, posez-la ici.

Mise à jour

Ce billet de blog de Robert Muehsig couvre également le sujet et propose une solution téléchargeable. D'après votre commentaire, cela ressemble plus à ce que vous voulez réellement accomplir:

1
Martin Buberl