我在Kendo Grid中遇到了一个奇怪的问题。我有两层深度的详细模板,它大部分时间都在工作(听起来很奇怪)。有时,最深的网格不会绑定来自服务器的数据而不会出现任何错误。在检查Firebug时,我可以看到Json响应明显响应了正确的数据,但是网格没有绑定数据(至少css类在标记中显示“t-no-data”)。但我要清楚,这有时只会发生,而不是总是发生。我一直试图弄清楚这种情况何时发生但却未能发现任何模式。以下是我的代码示例:
<div>
@(Html.Kendo().Grid<DepObject>()
.Name("DepartmentGrid")
.Columns(c =>
{
c.Bound(e => e.DepartmentCode).Hidden();
c.Bound(e => e.DepartmentName);
})
.ClientDetailTemplateId("CesTmp")
.DataSource(d => d.Ajax().Model(model => model.Id(p => p.DepartmentCode)))
.Scrollable(s => s.Enabled(true))
)
</div>
<script id="CesTmp" type="text/kendo-tmpl">
@(Html.Kendo().Grid<CesObject>()
.Name("CesGrid_#=DepartmentCode#")
.Columns(c =>
{
c.Bound(e => e.CesCode).Hidden();
c.Bound(e => e.CesName);
})
.ClientDetailTemplateId("ItemTmp")
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetCesData", "Cesce", new { depCode = "#=DepartmentCode#" }).Data("filterCes")).Model(m => m.Id(p => p.CesCode))
.Events(ev => ev.Error("onErrorCes"))
)
.ToClientTemplate()
)
</script>
<script id="ItemTmp" type="text/kendo-tmpl">
@(Html.Kendo().Grid<ItemObject>()
.Name("ItemGrid_#=CesCode#")
.Columns(columns =>
{
columns.Bound(p => p.Item).Hidden();
columns.Bound(p => p.Description).Encoded(false);
})
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetItemData", "Cesce", new { depCode = "#=DepartmentCode#", cesceCode = "#=CesCode#" }).Data("filterItem"))
.Events(ev => ev.Error("onErrorCes"))
)
.ToClientTemplate()
)
</script>
有谁知道可能导致这种奇怪行为的原因是什么?
答案 0 :(得分:1)
激活“在源中显示线程”按钮后尝试调试。
由于这种线程结构,我有很多奇怪的问题。也许读取函数的顺序是倒置的。
只是一个想法。
答案 1 :(得分:0)
过了一会儿,我偶然发现了一个模式。最深的网格CesceCode网格显示具有相同CesceCode的数据,具体取决于所选的部门。因此,我不得不为网格创建更复杂的ID,如果用户点击了具有相同ID的cesce网格,则网格ID不是唯一的。而不是只使用CesceCode og还添加了DepartmentCode来创建更复杂的ID。这是我用来抓取网格的脚本示例:
var itemDetailGrid = $("#itemCostGrid_" + DepartmentCode + CesceCode).data("kendoGrid");
无论如何,我应该对声明客户端所做的应该是这样的:
<script id="ItemTmp" type="text/kendo-tmpl">
@(Html.Kendo().Grid<ItemObject>()
.Name("ItemGrid_#=DepartmentCode##=CesCode#") // <-- this is the new name
.Columns(columns =>
{
columns.Bound(p => p.Item).Hidden();
columns.Bound(p => p.Description).Encoded(false);
})
.DataSource(dataSource => dataSource
.Ajax()
.Read(read => read.Action("GetItemData", "Cesce", new { depCode = "#=DepartmentCode#", cesceCode = "#=CesCode#" }).Data("filterItem"))
.Events(ev => ev.Error("onErrorCes"))
)
.ToClientTemplate()
)
感谢所有输入人员:)