我不知道为什么我总是遇到最棘手的问题。我正在使用Kendo UI Charting。这是在PartialView中。当jQuery调用PartialView时,它会在运行时生成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 :(得分:1)
生成客户端代码不是好习惯。在你的情况下,最好在生成的div的数据属性中返回json数据。之后,您可以使用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”,“Chart”)以使用json数据返回onlu字符串。你也可以返回JsonResul类型并使用$.getJSON方法来避免使用json解析(var dataObj = JSON.parse(data);)