Kendo UI ComboBox加载延迟

时间:2016-02-03 09:56:33

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

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

ToList()

这是行动方法: -

@(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; } 以前我得到的关于json lenth它的问题太高了,所以我已经解决了这个问题。 现在组合框已经加载并持续了6秒,但是第二次当我尝试加载相同的记录(所有记录)时,它再次花了6秒甚至我放在result.MaxJsonLength = int.MaxValue; ActionMethod上的破坏点没有得到击中。如果组合框从缓存中加载,那为什么需要6秒? 我希望你理解我的问题,如果不是请评论我可以解释更多。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

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