asp.net mvc highchart linegraph json

别等时光非礼了梦想. 提交于 2019-12-21 20:56:23

问题


I'm trying to get the line-example at: http://www.highcharts.com/demo/line-basic/grid working with a jsonresult, but can't figure out how to achieve this.

The controler code:

public JsonResult GetLineData()
    {
        Dictionary<string, double[]> retVal = new Dictionary<string, double[]>();
        double[] Array1 = {7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6};
        retVal.Add("Tokyo", Array1);

        double[] Array2 = { -0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5 };
        retVal.Add("New York", Array2);

        return Json(retVal.ToArray(), JsonRequestBehavior.AllowGet);
    }

My jqquery looks like this:

var chart;
    $(document).ready(function () {
        var options = {
            chart: {
                renderTo: 'container',
                defaultSeriesType: 'line',
                marginRight: 130,
                marginBottom: 25
            },
            title: {
                text: 'Monthly Average Temperature',
                x: -20 //center
            },
            subtitle: {
                text: 'Source: WorldClimate.com',
                x: -20
            },
            xAxis: {
                categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
            },
            yAxis: {
                title: {
                    text: 'Temperature (°C)'
                },
                plotLines: [{
                    value: 0,
                    width: 1,
                    color: '#808080'
                }]
            },
            tooltip: {
                formatter: function () {
                    return '<b>' + this.series.name + '</b><br/>' +
           this.x + ': ' + this.y + '°C';
                }
            },
            legend: {
                layout: 'vertical',
                align: 'right',
                verticalAlign: 'top',
                x: -10,
                y: 100,
                borderWidth: 0
            },
            series: []
        };

        //Calls the JSON            
        jQuery.getJSON("GetLineData", null, function (items) {
            var series = {
                name: '',
                data: []
            };                
            jQuery.each(items, function (itemNo, item) {
                //Get the items from the JSON and add then
                //to the data array of the series                               
                series.data.push({
                    name: item.Key,
                    data: item.Value
                })                    
            });
            options.series.push(series);

            //Create the chart
            chart = new Highcharts.Chart(options);
            chart.render();
        });


    });

The chart shows up without an error, but also without the two lines. I guess the series are not builded the right way? Thanks in advance for your help.


回答1:


Try this. I am assuming item.Value is an array which can be used as data to be provided to the chart.

//Calls the JSON            
        jQuery.getJSON("GetLineData", null, function (items) {
            var series = [];                
            jQuery.each(items, function (itemNo, item) {
                //Get the items from the JSON and add then
                //to the data array of the series                               
                series.push({
                    name: item.Key,
                    data: item.Value
                })                    
            });
            options.series = series;

            //Create the chart
            chart = new Highcharts.Chart(options);
            chart.render();
        });



回答2:


I think all you need to do is instead of

options.series.push(series);

do

options.series = series;

or else your pushing the entire array as a single item into an array




回答3:


With DotNet.Highcharts you don't need to think how to pass data from the action method to the javascript. You can construct and bind everything on the server side. Here is the example for the Basic Line with this library:

public ActionResult BasicLine()
    {
        Highcharts chart = new Highcharts("chart")
            .InitChart(new Chart
                       {
                           DefaultSeriesType = ChartTypes.Line,
                           MarginRight = 130,
                           MarginBottom = 25,
                           ClassName = "chart"
                       })
            .SetTitle(new Title
                      {
                          Text = "Monthly Average Temperature",
                          X = -20
                      })
            .SetSubtitle(new Subtitle
                         {
                             Text = "Source: WorldClimate.com",
                             X = -20
                         })
            .SetXAxis(new XAxis { Categories = ChartsData.Categories })
            .SetYAxis(new YAxis
                      {
                          Title = new XAxisTitle { Text = "Temperature (°C)" },
                          PlotLines = new[]
                                      {
                                          new XAxisPlotLines
                                          {
                                              Value = 0,
                                              Width = 1,
                                              Color = ColorTranslator.FromHtml("#808080")
                                          }
                                      }
                      })
            .SetTooltip(new Tooltip
                        {
                            Formatter = @"function() {
                                    return '<b>'+ this.series.name +'</b><br/>'+
                                this.x +': '+ this.y +'°C';
                            }"
                        })
            .SetLegend(new Legend
                       {
                           Layout = Layouts.Vertical,
                           Align = HorizontalAligns.Right,
                           VerticalAlign = VerticalAligns.Top,
                           X = -10,
                           Y = 100,
                           BorderWidth = 0
                       })
            .SetSeries(new[]
                       {
                           new Series { Name = "Tokyo", Data = new Data(new object[] { 7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6 }) },
                           new Series { Name = "New York", Data = new Data(new object[] { -0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5 }) },
                           new Series { Name = "Berlin", Data = new Data(new object[] { -0.9, 0.6, 3.5, 8.4, 13.5, 17.0, 18.6, 17.9, 14.3, 9.0, 3.9, 1.0 }) },
                           new Series { Name = "London", Data = new Data(new object[] { 3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8 }) }
                       }
            );

        return View(chart);
    }

You also can find a lot of MVC samples here: http://dotnethighcharts.codeplex.com/releases/view/80650



来源:https://stackoverflow.com/questions/6411976/asp-net-mvc-highchart-linegraph-json

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!