ChartJS的条形图无法渲染

时间:2015-07-09 09:05:09

标签: ajax json asp.net-mvc-5 chart.js

我在ASP.NET-MVC-5应用程序中显示条形图时遇到问题。我目睹了JSON正确出现(示例在下面应用),并且根据我已包含所有的文档,但输出如下:

enter image description here

HTML:

<div class="jumbotron">
    <h1>Another Chart</h1>
    <canvas id="barChartLoc" width="600" height="400"></canvas>
</div>

这是调用Controller的脚本,它返回一个JSON:

<script type="text/javascript">
function chartFYRevenue() {
        $.ajax({
            url: '@Url.Action("GetLast5FYRevenueAnalysis", "Utility")',
            cache: true
        })
        .done(function (data) {
            var mybarChartLoc = new Chart(document.getElementById("barChartLoc").getContext("2d")).Bar(data);
        })
        .fail(function () {
            alert("Ajax failed to fetch data");
        });
    }

 $(document).ready(function () {
        //auto load on page load
        chartFYRevenue();
});
</script>

这是返回JSON的Controller。我已经对此进行了测试,这里的情况也很好:

public JsonResult GetLast5FYRevenueAnalysis()
        {
            Models.Chart.BarChartDBContext chartDB = new Models.Chart.BarChartDBContext();

            return Json(chartDB.Test, JsonRequestBehavior.AllowGet);
        }

这是我动态构建图表数据的Modeler类:

public class ChartDataSets
    {
        public string label { get; set; }
        public string fillColor { get; set; }
        public string highlightFill { get; set; }
        public string highlightStroke { get; set; }
        public string strokeColor { get; set; }
        public string data { get; set; }
    }

    public class BarChartModel
    {
        public string labels { get; set; }
        public List<ChartDataSets> datasets { get; set; }
    }

    public class BarChartDBContext : Models.DBHelper.DBHelperClass
    {
        public BarChartModel GetLast5FInancialYearRevenue
        {
            get { return getLast5FinancialYearRevenue(); }
        }

        public BarChartModel Test
        {
            get { return test(); }
        }

        private BarChartModel test()
        {
            List<ChartDataSets> _datasets = new List<ChartDataSets>();
            BarChartModel _barChartModel = null;

            _datasets.Add(new ChartDataSets()
            {
                data = string.Format("[{0}]", "10,5,25,35"),
                fillColor = "rgba(220,220,220,0.5)",
                highlightFill = "rgba(220,220,220,0.75)",
                highlightStroke = "rgba(220,220,220,1)",
                strokeColor = "rgba(220,220,220,0.8)",
                label = "s1"
            });

            _barChartModel = new BarChartModel();
            _barChartModel.labels = string.Format("[{0}]", "c1,c2,c3,c4");
            _barChartModel.datasets = _datasets;

            return _barChartModel;
        }
}

JSON数据样本:

{
    "labels": "[c1,c2,c3,c4]",
    "datasets": [
        {

            "label": "s1",
            "fillColor": "rgba(220,220,220,0.5)",
            "highlightFill": "rgba(220,220,220,0.75)",
            "highlightStroke": "rgba(220,220,220,1)",
            "strokeColor": "rgba(220,220,220,0.8)",
            "data": "[10,5,25,35]"
        }
    ] 
}

更新

我将ChartDataSet和BarChartModel类修改为以下内容:

public class ChartDataSets
    {
        public string label { get; set; }
        public string fillColor { get; set; }
        public string highlightFill { get; set; }
        public string highlightStroke { get; set; }
        public string strokeColor { get; set; }
        public string[] data { get; set; }
    }

    public class BarChartModel
    {
        public string[] labels { get; set; }
        public List<ChartDataSets> datasets { get; set; }
    }

1 个答案:

答案 0 :(得分:2)

您生成的JSON数据不正确。正确的输出应该是

"{
    "labels": ["c1","c2","c3","c4"],
    "datasets": [
        {
            "label":"s1",
            "fillColor":"rgba(220,220,220,0.5)",
            "highlightFill":"rgba(220,220,220,0.75)",
            "highlightStroke":"rgba(220,220,220,1)",
            "strokeColor":"rgba(220,220,220,0.8)",
            "data":[10,5,25,35]
        }
    ]
}"