带有大型数据源的 Kendo Chart 的 Ajax 请求上的 ASP.NET MVC 应用程序?

Posted

技术标签:

【中文标题】带有大型数据源的 Kendo Chart 的 Ajax 请求上的 ASP.NET MVC 应用程序?【英文标题】:ASP.NET MVC Application on Ajax request with Kendo Chart with large datasource? 【发布时间】:2016-06-25 11:13:05 【问题描述】:

我正在为 ASP.NET MVC 使用 Kendo UI 图表,并为其提供数据传输对象列表以通过 Ajax 请求填充数据。然而,问题在于列表的大小。我在这个列表中有大约 3900 个 dto(因为它是从一个文件中解析出来的),每个 dto 中有 9 个对象:

public DateTime Time  get; set; 

public int BeatsPerMinute  get; set; 

public double Speed  get; set; 

public int Cadence  get; set; 

public double? Altitude  get; set; 

public int Power  get; set; 

public int? PowerBalance  get; set; 

public double Distance  get; set; 

我需要每个 dto 中的所有项目,但是当我发送 Ajax 请求时,我的浏览器超时。我已将我的 web.config jsonSerialization maxJsonLength 设置为 50000000,但这并没有奏效。

对此有什么推荐的方法?

【问题讨论】:

【参考方案1】:

如果你使用 asp.net mvc 3.0,它会忽略 web.config 中的 maxJsonLength。在控制器中使用:

return new JsonResult  Data = Result, MaxJsonLength = Int32.MaxValue ;

【讨论】:

谢谢。似乎设置 MaxJsonLength 没有帮助。我的页面仍然没有响应。 如果 json 长度有问题,您会看到一条错误消息。似乎控制器动作超时。尝试设置断点作为回报。计算结果需要多长时间?【参考方案2】:

所以事实证明不是我的服务或 json 导致了问题,因为当我单步执行代码时,一切都很好。当我填充 Kendo UI 图表时,我试图在页面上一次渲染 23400 个 DOM 元素,这似乎是事实。通过禁用 dto 中每个项目的绘图(不包括功率平衡)并仅显示线条,我节省了 19500 个 DOM 元素的加载。

series.Line(a => a.BeatsPerMinute).Markers(c => c.Visible(false));
series.Line(a => a.Altitude).Markers(c => c.Visible(false));
series.Line(a => a.Cadence).Markers(c => c.Visible(false));
series.Line(a => a.Power).Markers(c => c.Visible(false));
series.Line(a => a.Speed).Markers(c => c.Visible(false));

然后是日期时间。列表中有 3900 个 dto,这意味着我在图表中呈现了 3900 个 DateTime 值。通过提供 30 的步长(在我的例子中,30 秒,因为每个 DateTime 值相隔一秒),我节省了几乎所有剩余的 3900 个对象的加载。

.CategoryAxis(axis => axis
.Categories(a => a.Time)
.Labels(l => l.Rotation(-90)
.Step(30))

【讨论】:

以上是关于带有大型数据源的 Kendo Chart 的 Ajax 请求上的 ASP.NET MVC 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

带有远程嵌套JSON数据源的Kendo饼图

Kendo UI Chart 禁用图例项右键单击事件

如果数据相对较小,Kendo 柱形图的 Bar 不显示 -- Kendo Angular Chart

Kendo UI Chart中的组和堆栈数据

如何将“verticalRangeArea”与Kendo UI Chart中的折线图组合?

使用 CSS/JavaScript 更改 Kendo Chart 工具提示文本颜色