2013-06-26 2 views
1

Я не знаю, почему у меня всегда есть самые странные проблемы. Я использую Kendo UI Charting. который находится в PartialView. Когда PartialView вызывается jQuery, он генерирует div и некоторый код jQuery во время выполнения. Я добавляю весь код div и JQ ниже щелкнутой строки строки таблицы. Проблема в том, что он только добавляет div, он игнорирует тег сценария и его код, который необходим для рендеринга диаграммы.Сценарий не добавляется в таблицу

Мои PartialView является:

@(Html.Kendo().Chart() 
     .Name("XXXProducts") 
     .Title("XXX Products") 
     .Legend(legend => legend 
      .Visible(false) 
     ) 
     .ChartArea(chartArea => chartArea 
      .Background("transparent") 
     ) 
     .Series(series => 
     { 
      series.Bar(Model.SalesAxis).Name("Total Sales"); 
     }) 
     .CategoryAxis(axis => axis 
      .Categories(Model.MonthsAxis) 
      .MajorGridLines(lines => lines.Visible(false)) 
     ) 
     .ValueAxis(axis => axis 
      .Numeric() 
      .Max(Model.SalesAxis.Max() + 100) 
      .Line(line => line.Visible(false)) 
      .MajorGridLines(lines => lines.Visible(true)) 
     ) 
     .Tooltip(tooltip => tooltip 
      .Visible(true) 
      .Template("#= series.name #: #= value #") 
     ) 
) 

Мой JQuery код на другой странице, чтобы сделать вид:

function RenderChart(row) { 

    var rowIndex = $("#tblDetail").find($(row)).index() + 1; 
    var chartData = ''; 

    $.get('@Url.Action("MonthlyChart", "Chart")', function (data) { 
     chartData = "<tr style='height:300px;'><td colspan='5'>" + data + "</td></tr>"; 
     $('#tblDetail tr:nth-child(' + rowIndex + ')').after(chartData); 
    }); 
} 

Когда я оповещать "chartData", он показывает следующее:

<tr><td colspan='5'><div class="k-chart" id="XXXProducts"></div><script> jQuery(function(){jQuery("#XXXWaterProducts").kendoChart({"chartArea":{"background":"transparent"},"title":{"text":"Site Visitors Stats /thousands/"},"legend":{"visible":false},"series":[{"name":"Total Sales","type":"bar","data":[56000,74500,45000,86000,49850,63482,97600,63250,79860,42100,32010,89200]}],"categoryAxis":[{"majorGridLines":{"visible":false},"categories":["January","February","March","April","May","June","July","August","September","October","November","December"]}],"valueAxis":[{"majorGridLines":{"visible":true},"line":{"visible":false},"max":97700}],"tooltip":{"template":"#= series.name #: #= value #","visible":true}});});</script> </td></tr> 

Но когда я проверяю источник, он показывает только:

<tr><td colspan='5'> <div class="k-chart" id="XXXProducts"></div></td></tr> 

Тэги скриптов нигде не найдены.

+0

Sigh. Вы не можете добавить тег скрипта, который находится в строке. Этот вопрос задан и ответил уже сотни раз ... – mekwall

+0

Вы можете использовать метод eval() для запуска js-скрипта из строки. – YD1m

ответ

1

Создание кода на стороне клиента не является хорошей практикой. В вашем случае лучше вернуть данные json в атрибут данных сгенерированного div. После этого вы можете проанализировать строку из атрибута данных объекту с помощью метода JSON.parse() и запустить метод, который создает диаграмму.

function RenderChart(row) { 

    var rowIndex = $("#tblDetail").find($(row)).index() + 1; 
    var chartData = ''; 

    $.get('@Url.Action("MonthlyChart", "Chart")', function (data) { 
     var dataObj = JSON.parse(data); 
     chartData = "<tr style='height:300px;'><td colspan='5'></td></tr>"; 
     $('#tblDetail tr:nth-child(' + rowIndex + ')').after(chartData); 
     $("#XXXWaterProducts").kendoChart(dataObj); 
    }); 
} 

Вам нужно изменить @ Url.Action ("MonthlyChart", "Диаграмма") для возврата onlu строку с данными JSON. Также вы можете вернуть тип JsonResul и использовать метод $.getJSON, чтобы избежать использования json-анализа (var dataObj = JSON.parse (данные);)