使用Mvc3和Razor引擎渲染融合图

时间:2012-03-30 01:40:50

标签: c# asp.net-mvc-3 razor fusioncharts html-encode

从昨天起,我尝试运行一个代码示例来显示FusionCharts和Mvc3 Razor的图表,但没有任何效果。请帮忙!!! :)

这就是我所做的:

  1. 我从Libero那里拿走了这个项目。 here

  2. 之后,我使用项目转换器here将项目从Mvc2升级到Mvc3。

  3. 当我尝试运行代码(F5并在浏览器中显示结果)时,这很好用;所有图形都正确显示。

  4. 如果我只用razor(.cshtml)而不是当前的.aspx创建一个新视图(将旧语法中的视图替换为新剃刀)并尝试显示相同的图形,页面显示正确但没有图形。当我使用firebug或任何其他工具查看页面源时,场景后面没有代码。在Firefox中使用Web Developer工具时,我也没有任何错误。

    我只是尝试在代码前面添加一个Html.Raw,生成javascript以不对输出进行编码,我得到了相同的结果。还尝试返回HtmlString但同样的结果;没有显示图形。

    不要错过这个问题的关键是,如果我尝试完全相同的代码,但使用.aspx文件,一切都是正确的。

    在.aspx中,代码如下所示:

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

    在.cshtml中:

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

    最后,html帮助器生成这一堆代码:

      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();
      }
    

    我不知道我是否必须在web.config中设置一些配置选项,或者我对Mvc2的行为与Mvc3相比我不明白,但这非常令人沮丧。

    如果您有任何想法,请提前预测。

2 个答案:

答案 0 :(得分:1)

应该是@Html.FChart("Chart01", ViewData["MyChart"], 600, 400)而不是@{Html.FChart("Chart01", ViewData["MyChart"], 600, 400); }

答案 1 :(得分:0)

FusionCharts提供了一个.NET库,可以使渲染图表成为一个整体 - 通过FusionCharts Documentation读取。

他们的博客最近有一个教程 - JavaScript Charts with ASP.NET (C#) Using FusionCharts XT