ASP.NET MVC JsonResult和JQuery flot

问题描述 投票:6回答:3

我正在尝试将jquery flot图形插件与asp.net mvc一起使用。我正在尝试从JsonResult动态提取数据以填充图形。

我的问题是,我似乎无法以正确的格式从JsonResult返回的数据。

这是我的服务器端代码:

public ActionResult JsonValues()
{
    IList<IDictionary<string, int>> listofvalues = new List<IDictionary<string, int>>();
    IDictionary<string, int> values1 = new Dictionary<string, int>();
    values1.Add("2003", 10882);
    values1.Add("2002", 10383);
    values1.Add("2001", 10020);
    values1.Add("2000", 9762);
    values1.Add("1999", 9213);
    values1.Add("1998", 8720);

    IDictionary<string, int> values3 = new Dictionary<string, int>();
    values3.Add("2003", 599);
    values3.Add("2002", 510);
    values3.Add("2001", 479);
    values3.Add("2000", 457);
    values3.Add("1999", 447);
    values3.Add("1998", 414);

    listofvalues.Add(values1);
    listofvalues.Add(values3);

    JsonResult result = new JsonResult { Data = listofvalues };
    return result;
}

这是我的客户端代码:

$(function() {
    $.getJSON("/path/to/JsonValues", function(data) {
        var plotarea = $("#plot_area");
        $.plot(plotarea, data);
    });
});

注意,以下客户端代码可以正常工作:

$(function() {
    var points = [
        [[2003, 10882],
        [2002, 10383],
        [2001, 10020],
        [2000, 9762],
        [1999, 9213],
        [1998, 8720]],

        [[2003, 599],
        [2002, 510],
        [2001, 479],
        [2000, 457],
        [1999, 447],
        [1998, 414]]
    ];

    var plotarea = $("#plot_area");
    $.plot(plotarea, points);
});

鉴于以上内容正常工作,看来这只是正确格式化返回的JsonResult的问题。我怎样才能做到这一点?词典列表是返回的最佳类型,还是我应该使用其他格式?还是在javascript中有一个我应该用来正确格式化数据的函数?

似乎很简单,但是我不能完全正常工作。

asp.net-mvc json jquery-plugins
3个回答
5
投票

检查您的Json返回给客户端,它将是具有键值对的Json对象,类似于:

{{'2003':10882,'2002':10383},....}

在需要数组的地方。

[[[2003, 10882],[2002, 10383]],...]

您总是可以自己生成Json字符串并返回结果

StringBuilder sb = new StringBuilder();
sb.append("[2003,10882],")
return Json("[" + sb.ToString() + "]");

或者您可以尝试将值存储在可能生成所需Json的数组中,但我没有尝试过。


5
投票

如果要使用C#数组,可以执行以下操作:

var values = new object[] {
    new object[] /* First series of value */
    {
        new int[,] { {2003,10882} },
        new int[,] { {2002,10383} }
    }
};

然后

return Json(values);

5
投票

您需要以下形式的JSON数组:

[[1, 1], [2, 3], [5, 5]]

flot类别插件希望以以下形式提供数据:

[["category1", 12], ["category2", 3]]

这不是用C#创建的简单方法(必须搜索很长时间:-))

关键是创建对象数组(object []

未经测试的代码如下:

IEnumerable<object[]> values1_array = from x in values1 
select new object [] {x.Key, x.Value};

IEnumerable<object[]> values3_array = from x in values3 
select new object [] {x.Key, x.Value};

//create one big object
var dataArray = new object[] {
    new {data = values1_array, label="Values1"},
    new {data = values3_array, label="Values3"},
};

//return Json data
return Json(dataArray) /* JsonRequestBehavior.AllowGet ?*/

您的JavaScript代码应该可以使用:

$(function() {
    $.getJSON("/path/to/JsonValues", function(data) {
        var plotarea = $("#plot_area");
        $.plot(plotarea, data);
    });
});
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.