【问题标题】:Kendo UI ComboBox Loading delayKendo UI ComboBox 加载延迟
【发布时间】:2016-02-03 09:56:33
【问题描述】:

我正在开发 Web 应用程序(运输域)并使用 kendo UI 来获得外观和感觉。在使用剑道组合框时,我遇到了一个问题。在数据库中,我们在绑定到组合框的 Vessel 表中有数千条记录,如果用户想要查看所有船只(第一次),加载大约需要 6 秒,但第二次加载需要相同的时间时间也是(这就是这里的问题),即使它没有命中控制器中的 Action 方法(第二次)。我认为它的剑道对于组合框的默认功能是,如果所有记录都在第一次加载(没有过滤器),它不会向服务器发送请求以获取相同请求的响应,直到我们在组合框过滤器中输入某些内容,但是如果组合框正在获取从缓存加载,那么加载组合框不应花费相同的时间(6 秒)。我已经在剑道组合框文档中搜索了缓存选项,但没有运气:(直到现在。 这是我的剑道组合框代码:-

@(Html.Kendo().ComboBoxFor(i => i.VesselId)
                                            .Name("VesselId").HtmlAttributes(new { style = "width:100%" })
                                            .DataTextField("VesselName")
                                            .Placeholder("Select Vessel...")
                                            .DataValueField("VesselId")
                        .Filter(FilterType.Contains)
                                            .AutoBind(false)
                                            .MinLength(1)
                                            .Value(proFormaVesselId)
                                .Text(proFormaVesselName)
                                            .DataSource(source =>
                                            {
                                                source.Custom()
                                                .ServerFiltering(true)
                                                .Type("aspnetmvc-ajax")

                                                .Transport(transport =>
                                                {
                                                    transport.Read("GetFilteredVessels", "Common");

                                                })

                                              .Schema(schema =>
                                              {
                                                  schema.Data("Data").Total("Total");
                                              });
                                            })
                                            .Events(eve => eve.Change(@<text>
                                                function () {
                                                if (this.value() && this.selectedIndex == -1)
                                                {
                                                var dt = this.dataSource._data[0];

                                                this.text('');
                                                }
                                                }

                                            </text>




))
                                            )

这里是动作方法:-

public JsonResult GetFilteredVessels([DataSourceRequest] DataSourceRequest request)
        {
            var data = _IVesselService.GetVessel().Select(x => new
            {
                VesselId = x.VesselId,
                VesselName = x.Status == (byte)enumRecordStatus.Accepted ? x.VesselName : (x.Status == (byte)enumRecordStatus.Draft ? x.VesselName + "(D)" : x.VesselName + "(R)")
            }).OrderBy(x => x.VesselName);
            var result= Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
            result.MaxJsonLength = int.MaxValue;
            return result;
        }

请不要对这行代码感到困惑result.MaxJsonLength = int.MaxValue; 之前我收到关于 json 长度太高的错误,所以我已经这样解决了。 现在组合框已加载并花费了 6 秒,但是当我第二次尝试加载相同的记录(所有记录)时,它再次花费了 6 秒,即使我在 GetFilteredVessels ActionMethod 上放置的断点也没有被击中。如果组合框从缓存中获取负载,那么为什么需要 6 秒? 我希望你理解我的问题,如果不是请评论我可以解释更多。 提前致谢。

【问题讨论】:

  • 如果您将数千条记录加载到组合框中,那么这就是将数千个对象加载到 DOM 中,这可能需要花费时间。我建议您查看启用组合框的virtualization 功能或在组合框中显示适当数量的项目,例如一次100个。我遇到了类似的问题,我的响应时间从 6 秒以上变为即时更新。
  • 感谢@DavidShorthose 的回复,是的,我在这里看到了演示demos.telerik.com/kendo-ui/combobox/virtualization
  • 但是当我尝试使用 .Virtual() 方法时,它在这个版本中不可用我使用的是 2014.2.903.545 版本的剑道,你能告诉我我可以找到哪个版本的剑道这个方法?
  • 2015 Q1 telerik.com/support/whats-new/kendo-ui/release-history/q1-2015 是引入虚拟化功能的时候。如果您也有有效的更新许可证,我建议您尝试一下。我还建议您对代码进行分支(假设您使用某种形式的源代码仓库),因为我认为从 2014 年到 2015 年发生了一些重大变化
  • 非常感谢,上帝保佑你 :)

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


【解决方案1】:

根据@David Shorthose 的建议,我找到了解决此问题的临时解决方案。请参考这个Demo我没有选择这个作为答案,因为可能有人或我可以为此提供更好的解决方案,让我们希望最好。我还在研究它

【讨论】:

    猜你喜欢
    • 2017-04-17
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多