2012-03-30 2 views
0

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

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

  1. Я взял PROJET от Libero. here

  2. После этого я использовал проектный преобразователь here для обновления проекта от 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 Helper для создания этой кучи коды:

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, но это очень неприятно.

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

ответ

1

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

+0

большое спасибо. Это решает мою проблему. Мне интересно, почему второе не работает. Я думаю, что второй возвращает значение непосредственно в ответе http, а первое возвращает строку, обрабатываемую представлением, но почему первый работает? – Samuel

Смежные вопросы