【问题标题】:Kendo Chart Does not show Data剑道图表不显示数据
【发布时间】:2018-03-08 01:10:09
【问题描述】:

我通过控制器发送我的 json 数据,如下所示:我在这里编写查询只是为了防止它变得复杂和混乱:

我的控制器返回这个:

    public JsonResult powerConverter(string regionalManager)


   foreach (DataRow dt in dt_power_conv.Rows)
        {

            _powerConv.turbineName.Add(dt["turbine_name"].ToString());
            _powerConv.duration_hrs.Add(double.Parse(dt["duration_hrs"].ToString()));
            _powerConv.abb_conv.Add(dt["abb_conv"].ToString());
            _powerConv.eei_conv.Add(dt["eei_conv"].ToString());
            _powerConv.leit_drive_conv.Add(dt["leit_drive_conv"].ToString());

        }


        return Json(_powerConv, JsonRequestBehavior.AllowGet);


 }

在我看来,我通过 Ajax 调用得到它,并简单地将我的图表与它绑定:

       $.ajax({

     dataType: "json",
     type: "POST",
     url: "@Url.Action("powerConverter","Ranking")",
     contentType: "application/json; charset=utf-8",
     data: JSON.stringify({ "regionalManager": tmpString }),
     success: function (result) {
 debugger;

           $("#powerChart").kendoChart({

     dataSource: {
     data: result
 },

     chartArea: {
     background: "#fcfcfc",
 },
     series: [{
     axis: "l100km",

     type: "column",
     // name: "DURATION",
     color: "#008080",
         field: "duration_hrs",
         categoryField: "turbineName"
 },


 ],

     categoryAxis: {
     axisCrossingValue: [0, 20],

     majorGridLines: {

     visible: false


 },
     line: {



     visible: true
 },

     labels: {

     rotation: 340

 },


 },

     tooltip: {
     visible: true,

     // majorUnit:10,
     template: " #= value #"
 },

 });


     }

 });

我还发布了我的 json 的屏幕截图,但它仍然无法正常工作,我将 categoryField 和字段设置为我从 json 获得的确切名称,但图表没有显示任何内容

【问题讨论】:

  • tmpString 是如何分配的?可能是 url 被传递了一个导致没有数据返回的值。如果您要取回数据,浏览器工具网络选项卡会为请求和响应显示什么?同样,当您调试控制器时,它是否获得了预期的区域管理器参数?
  • @Richard 我有 json 格式的数据,但我认为我的代码应该有问题,请问如何在图表上显示我的数据?
  • 如果没有看到 json 样本就很难说。字段名称区分大小写,因此这可能是一个原因。数据字段名称似乎也有不同的命名约定,这是编码时的另一个“有趣”功能。另外,请检查您的浏览工具控制台是否有错误消息
  • @Richard 我用我的 json 屏幕截图编辑了我的问题
  • 能否也为powerConverter方法添加控制器代码。如果有很多就砍掉它,只需要查看return语句以及toJson'd的值是如何设置的。

标签: kendo-ui kendo-asp.net-mvc


【解决方案1】:

控制器似乎返回了两个数组,一个用于 errorDuration,一个用于涡轮名称。尝试更改控制器以返回对象数组。

您希望查看返回的 json 以显示

[0] = { duration: 1, turbine: "a" }
[1] = { duration: 2, turbine: "b" }
[2] = { duration: 3, turbine: "c" }

在图表中,该系列的配置设置字段名称必须与完全数据元素的属性名称匹配,因此

field: "duration",
categoryField: "turbine",

已添加

控制器代码似乎正在填充模型类的列表,其字段也是列表。尝试更新它以返回对象列表的 Json

为了快速起见,这个例子展示了如何使用匿名对象。强烈建议使用强类型对象以实现稳健性和 Visual Studio 智能感知。您在剑道图表配置中使用的字段名称将是“turbine_name”和“duration_hours”

// This technique copied from @Paul Rouleau answer to 
// https://stackoverflow.com/questions/612689/a-generic-list-of-anonymous-class

// initialize an empty list that will contain objects having two fields
var dataForJson = new List<Tuple<string, double>>()
      .Select(t => new { 
          turbine_name = t.Item1,
          duration_hours = t.Item2 }
       ).ToList();      

// go through data table and move data into the list
foreach (DataRow row in myDataTable.Rows)
{
    dataForJson.Add (new {
      turbine_name = (string)row["turbine_name"],
      duration_hours = (double)row["duration_hours"]
    });
}

return Json(dataForJson, JsonRequestBehavior.AllowGet);

请注意,如果您进一步研究,您会发现许多其他将数据表转换为 Json 的方法

【讨论】:

  • Richard 我更新了我的问题,结果还是一样,图表什么也没有显示
  • 您需要将数据整形为组件所需的布局。答案已更新以显示如何修改控制器。对于无法更改控制器的情况,客户端(javascript)必须重塑它获得的任何数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多