控制器:
public ActionResult GetTaskStatus()
{
TaskPieChart model = new TaskPieChart();
return Content(model.getStatus(1), "application/json");
}
模型: 所有实现细节都包含waaaaaaaaay太多的代码,但它会返回一个有效的JSON字符串(model.getStatus将最终返回jsonResult)使用以下方法:
public string DataTableToJSON(DataTable dt)
{
string jsonResult = "";
DataSet dataSet = new DataSet("dataSet");
dataSet.Namespace = "NetFrameWork";
dataSet.Tables.Add(dt);
dataSet.AcceptChanges();
jsonResult = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
return jsonResult;
}
JSON文件以此格式返回数据
{
"project.Tasks_Status": [
{
"TaskName": "Task 1",
"TaskCompleted": 1000.0
},
{
"TaskName": "Task 2",
"TaskCompleted": 0.0
},
...
]
}
查看
<script src="http://www.amcharts.com/lib/3/amcharts.js"></script>
<script src="http://www.amcharts.com/lib/3/serial.js"></script>
<script src="http://www.amcharts.com/lib/3/plugins/dataloader/dataloader.min.js"></script>
<div id="chartdiv" style="width: 100%; height: 500px;"></div>
<script>
var chart = AmCharts.makeChart( "chartdiv", {
"type": "pie",
"theme": "light",
"titleField": "TaskName",
"valueField": "TaskCompleted",
"dataLoader": {
"url": "../Home/GetTaskStatus",
"format": "json"
},
});
</script>
问题是,一旦我加载了我的视图,VS就会抛出异常并突出显示上面的代码(在我的脚本标记内),并显示以下错误消息:
http://www.amcharts.com/lib/3/amcharts.js中第1行第5209行的未处理异常 0x800a01bd - JavaScript运行时错误:对象不支持此操作
是否有人熟悉amcharts来帮助我?非常感谢。提前感谢您提供的任何帮助。
答案 0 :(得分:1)
您的代码存在两个问题:
1)由于您正在制作饼图,因此您需要在视图中加入pie.js
。 serial.js
适用于行和列:
<script src="http://www.amcharts.com/lib/3/amcharts.js"></script>
<script src="http://www.amcharts.com/lib/3/pie.js"></script>
<script src="http://www.amcharts.com/lib/3/plugins/dataloader/dataloader.min.js"></script>
2)dataLoader期望返回值是数组对象,而不是包含数组的对象,即:
[
{
"TaskName": "Task 1",
"TaskCompleted": 1000.0
},
{
"TaskName": "Task 2",
"TaskCompleted": 0.0
},
...
]
您需要修复有效负载以仅返回数组或使用数据加载器的postProcess
回调来指定有效负载的project.Tasks_Status
属性中的数组:
"dataLoader": {
"url": "../Home/GetTaskStatus",
"format": "json",
"postProcess": function(data) {
return data["project.Tasks_Status"];
}
}