我正在开发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秒?
我希望你理解我的问题,如果不是请评论我可以解释更多。
提前谢谢。
答案 0 :(得分:0)
根据@David Shorthose的建议,我找到了解决这个问题的临时解决方案。请参考这个Demo我不是选择这个作为答案,因为可能有人或我可以为此提供更好的解决方案,让我们希望最好。我仍在寻找研究它