将数组从控制器传递到Javascript

时间:2012-06-20 15:34:00

标签: javascript asp.net-mvc-3 controller

我在将一个数组从控制器传递到视图中的javascript时遇到了一些麻烦。 我正在使用ASP .Net MVC3,我正在尝试用数据库中的数据制作一些图表/图形,我发现了HighCharts javascript,我正在尝试使用它。

以下是示例:

$(function () {
var chart;
$(document).ready(function() {
    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            plotBackgroundColor: null,
            plotBorderWidth: null,
            plotShadow: false
        },
        title: {
            text: 'Browser market shares at a specific website, 2010'
        },
        tooltip: {
            formatter: function() {
                return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
            }
        },
        plotOptions: {
            pie: {
                allowPointSelect: true,
                cursor: 'pointer',
                dataLabels: {
                    enabled: true,
                    color: '#000000',
                    connectorColor: '#000000',
                    formatter: function() {
                        return '<b>'+ this.point.name +'</b>: '+ this.percentage +' %';
                    }
                }
            }
        },
        series: [{
            type: 'pie',
            name: 'Browser share',
            data: [
                ['Firefox',   45.0],
                ['IE',       26.8],
                ['Chrome',       12.8],
                ['Safari',    8.5],
                ['Opera',     6.2],
                ['Others',   0.7]
            ]
        }]
    });
});

});

我上了这堂课:

public class RegistoPie
{
    public string na { get; set; }
    public double da { get; set; }


    public RegistoPie(string n, double d) {

        na = n;
        da = d;

    }
}

然后我将此对象发送到试图填充javascript中的数据变量的视图中:

var pie = new [] { new RegistoPie("papa",20.0), new RegistoPie("pepe",50.0) };

但它返回的内容如下:

[{"na":"papa","da":20},{"na":"pepe","da":50}];

因此它与javascript中的数据变量的语法不同,只有:

[[string,double], [,] , ... ]

帮助任何人?! 泰, 埃尔德

1 个答案:

答案 0 :(得分:2)

控制器中的

ViewBag.Array = new[] { new RegistoPie("papa", 20.0), new RegistoPie("pepe", 50.0) };

在视图中:

@{
    var myArray = ViewBag.Array as TestMVC.Controllers.RegistoPie[];

    for (int i = 0; i < myArray.Length; i++)
    {
        var item = myArray[i];
    <text> ['@item.na', @item.da] @((myArray.Length - 1) != i ? "," : "")</text>
    }
}