2012-03-30 7 views
0

Depuis hier, j'essaie d'exécuter un exemple de code pour afficher un graphique avec FusionCharts et Mvc3 Razor et rien ne fonctionne. S'il vous plaît .... aider !!! :)Rendu fusionchart avec moteur Mvc3 et Razor

Voici ce que je l'ai fait:

  1. Je pris le projet de Libero. Après cela, j'ai utilisé le convertisseur de projet here pour mettre à niveau le projet de Mvc2 à Mvc3.

  2. Lorsque j'essaie de lancer le code (F5 et affiche le résultat dans le navigateur), cela fonctionne correctement; tous les graphiques sont affichés correctement.

Si je viens de créer une nouvelle vue avec rasoir (.cshtml) au lieu de l'actuel .aspx (remplaçant une vue de l'ancienne syntaxe du nouveau rasoir) et je tente d'affiche le même graphique, la page est affiché correctement mais sans graphique. Lorsque je regarde dans la source de la page avec firebug ou tout autre outil, aucun code n'est derrière la scène. Je n'ai également aucune erreur en regardant avec l'outil Web Developer dans Firefox.

J'ai juste essayé d'ajouter un Html.Raw devant le code qui génère le javascript pour ne pas encoder la sortie et j'ai le même résultat. Essayant aussi de retourner HtmlString mais encore le même résultat; aucun graphique n'est affiché.

La clé pour ne pas manquer dans ce problème est que si j'essaie exactement le même code mais avec un fichier .aspx, tout est correct.

En .aspx, le code ressemble à ceci:

<%=Html.FChart("Chart01", ViewData["MyChart"], 600, 400)%> 

Et .cshtml:

@{Html.FChart("Chart01", ViewData["MyChart"], 600, 400); } 

Et enfin, l'aide HTML pour générer ce groupe de code:

private static string RenderChart(string controlId, string xmlData, FusionChartBase chart, int width, int height) 
    { 
    String sControlId = controlId; 
    String sJsVarId = "_lib_JS_" + controlId; 
    String sDivId = "_lib_DIV_" + controlId; 
    String sObjId = "_lib_OBJ_" + controlId; 
    String sWidth = width.ToString(); 
    String sHeight = height.ToString(); 

    StringBuilder oBuilder = new StringBuilder(); 

    oBuilder.AppendLine(@"<div id=""" + sDivId + @""" align=""center""></div>"); 

    oBuilder.AppendLine(@"<script type=""text/javascript"">"); 

    oBuilder.AppendLine(@"var " + sControlId + @" = (function() {"); 
    oBuilder.AppendLine(@" return {"); 
    oBuilder.AppendLine(@"  containerId: '" + sDivId + "',"); 
    oBuilder.AppendLine(@"  xmlData: '',"); 
    oBuilder.AppendLine(@"  chartType: '',"); 
    oBuilder.AppendLine(@"  showChart: function() {"); 
    oBuilder.AppendLine(); 
    oBuilder.AppendFormat(@"   var chartURL = '{0}' + this.chartType.replace('Chart', '{1}');", UrlSWF, SufixSWF); 
    oBuilder.AppendLine(@"   var " + sJsVarId + @" = new FusionCharts(chartURL, """ + sObjId + @""", """ + sWidth + @""", """ + sHeight + @""");"); 
    oBuilder.AppendLine(@"   " + sJsVarId + @".setDataXML(this.xmlData);"); 
    oBuilder.AppendLine(@"   " + sJsVarId + @".render(""" + sDivId + @""");"); 
    oBuilder.AppendLine(@"  }"); 
    oBuilder.AppendLine(@" }"); 
    oBuilder.AppendLine(@"})();"); 

    oBuilder.AppendLine(@"setTimeout(function(){"); 
    oBuilder.AppendLine(@" " + sControlId + @".xmlData = """ + xmlData.Replace(@"""", @"'") + @""";"); 
    oBuilder.AppendLine(@" " + sControlId + @".chartType = """ + chart.ChartType + @""";"); 
    oBuilder.AppendLine(@" " + sControlId + @".showChart();"); 
    oBuilder.AppendLine(@"},0);"); 

    oBuilder.AppendLine(@"</script>"); 

    return oBuilder.ToString(); 
    } 

Je ne sais pas si je dois définir certaines options de configuration dans le web.config ou ce que je ne comprends pas dans le comportement de Mvc2 comparer à Mvc3, mais c'est très frustrant.

Si vous avez une idée, un grand merci à l'avance.

Répondre

1

Il devrait être @Html.FChart("Chart01", ViewData["MyChart"], 600, 400) au lieu de @{Html.FChart("Chart01", ViewData["MyChart"], 600, 400); }

+0

Merci beaucoup. Cela résout mon problème. Je me demande pourquoi la seconde ne fonctionne pas. Je pense que le second renvoie la valeur directement dans la réponse http et le premier retourne une chaîne qui est gérée par la vue mais pourquoi la première fonctionne? – Samuel