2

ディクショナリ オブジェクトをコントローラーからビュー内の JavaScript に渡すときに問題が発生しています。私は ASP .Net MVC3 を使用しています。データベースからのデータを使用してチャート/グラフィックスを作成しようとしています。HighCharts JavaScript を見つけて、それを操作しようとしています。次に例を示します。

$(function () {
var chart;
$(document).ready(function() {
    chart = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'column'
        },
        title: {
            text: 'Stacked column chart'
        },
        xAxis: {
            categories: ['Apples', 'Oranges', 'Pears', 'Grapes', 'Bananas']
        },
        yAxis: {
            min: 0,
            title: {
                text: 'Total fruit consumption'
            }
        },
        tooltip: {
            formatter: function() {
                return ''+
                    this.series.name +': '+ this.y +' ('+ Math.round(this.percentage) +'%)';
            }
        },
        plotOptions: {
            column: {
                stacking: 'percent'
            }
        },
            series: [{
            name: 'John',
            data: [5, 3, 4, 7, 2]
        }, {
            name: 'Jane',
            data: [2, 2, 3, 2, 1]
        }, {
            name: 'Joe',
            data: [3, 4, 4, 2, 5]
        }]
    });
});

});

シリーズ変数に辞書を入力したいのですが、使用しているメソッドは次のとおりです。

       public ActionResult GetSeries()
    {
        var series= new Dictionary<string, int[]> {
            { "pa", new int[]{1,2,3,4,5} },
            { "papa", new int[]{1,2,3,4,5} },
            { "papapa", new int[]{1,2,3,4,5} },
        };

        return Json(series, JsonRequestBehavior.AllowGet);
    }

{"pa":[1,2,3,4,5],"papa":[1,2,3,4,5]," papapa
":[1,2,3, 4,5]}

そのため、各フィールドの前に名前とデータを持つJavaScriptの構文と同じ構文ではありません

ところで、私はこれを使ってデータを埋めています

$.getJSON('@Url.Action("GetSeries)', function(series) {
...
series: series
...
});

よろしく、ヘルダー

4

1 に答える 1

0

返されるのは、連想配列が JavaScript でどのように見えるかです。一番上の例の JavaScript によると、本当に必要なのはオブジェクトの配列またはリストです。

    var series= new[] {
        new { name="pa", data=new int[]{1,2,3,4,5} },
        new { name="papa", data=new int[]{1,2,3,4,5} },
        new { name="papapa", data=new int[]{1,2,3,4,5} },
    };

    return Json(series, JsonRequestBehavior.AllowGet);

いくつかのビュー モデル (ビューでの表示に必要なすべてのデータを適切な形式と構造で含むクラスの単なる派手な名前) を作成し、それを JSON メッセージとして返します。

public class SeriesViewModel
{
   public string name { get; set; }
   public int[] data { get; set; }
}

public class GetSeriesViewModel
{
   public string[] categories { get; set; }
   public SeriesViewModel[] series { get; set; }   
}

JSON として送信する必要があるプロパティを追加するだけです。アクションで独自のロジックを使用してそれらを設定します。

public ActionResult GetSeries(string category)
{
    // look up your category and series information

    var model = new GetSeriesViewModel
        {
             categories = new[] { "category 1", "category 2" /* etc. */ }, // you can create this list from your code above
              series = new[] { new SeriesViewModel { name="pa", data=new int[] { 1, 2, 3, 4, 5 } } }// etc.... again, you can create these objects in your code above */
        };

     return Json(model, JsonRequestBehavior.AllowGet)
}
于 2012-06-20T11:06:23.437 に答える