Рендеринг fusionchart с помощью Mvc3 и Razor engine

Со вчерашнего дня я пытаюсь запустить образец кода для отображения диаграммы с помощью FusionCharts и Mvc3 Razor, и ничего не работает. Пожалуйста помоги!!! :)

Вот что я сделал:

  1. Я взял проект от Либеро. здесь

  2. После этого я использовал преобразователь проекта здесь, чтобы обновить проект с Mvc2 до Mvc3.

  3. Когда я пытаюсь запустить код (F5 и показать результат в браузере), это работает нормально; все графики отображаются корректно.

Если я просто создам новое представление с бритвой (.cshtml) вместо текущего .aspx (заменив представление со старого синтаксиса на новое бритву) и попытаюсь отобразить ту же графику, страница будет отображаться правильно, но без графики. Когда я просматриваю исходный код страницы с помощью firebug или любых других инструментов, за кулисами не видно никакого кода. У меня также нет ошибок при просмотре с помощью инструмента веб-разработчика в Firefox.

Я просто попытался добавить 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, но это очень расстраивает.

Если у вас есть какие-либо идеи, большое спасибо заранее.


person Samuel    schedule 30.03.2012    source источник


Ответы (2)


Должно быть @Html.FChart("Chart01", ViewData["MyChart"], 600, 400) вместо @{Html.FChart("Chart01", ViewData["MyChart"], 600, 400); }

person alok_dida    schedule 30.03.2012
comment
Большое Вам спасибо. Это решает мою проблему. Интересно, почему второй не работает. Я думаю, что второй возвращает значение непосредственно в ответе http, а первый возвращает строку, которая обрабатывается представлением, но почему первый работает? - person Samuel; 02.04.2012

FusionCharts предоставляет библиотеку .NET, которая упрощает визуализацию диаграмм — прочитайте Документация по FusionCharts.

В их блоге есть недавнее руководство — Диаграммы JavaScript с ASP.NET (C#) с использованием FusionCharts XT

person Hrishikesh Choudhari    schedule 30.03.2012