带有大型数据源的 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 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
如果数据相对较小,Kendo 柱形图的 Bar 不显示 -- Kendo Angular Chart