amcharts饼图不会加载数据

时间:2017-06-01 13:35:03

标签: asp.net-mvc-4 amcharts

控制器:

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来帮助我?非常感谢。提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

您的代码存在两个问题:

1)由于您正在制作饼图,因此您需要在视图中加入pie.jsserial.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"];
    }
}