【问题标题】:ASP.NET MVC Application on Ajax request with Kendo Chart with large datasource?带有大型数据源的 Kendo Chart 的 Ajax 请求上的 ASP.NET MVC 应用程序?
【发布时间】: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,但这并没有奏效。

对此有什么推荐的方法?

【问题讨论】:

    标签: c# asp.net json ajax kendo-ui


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      相关资源
      最近更新 更多