剑道网格细节模板两层深 - 最深的网格有时不绑定

时间:2014-01-08 14:45:33

标签: jquery asp.net-mvc asp.net-mvc-4 kendo-ui kendo-grid

我在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>

有谁知道可能导致这种奇怪行为的原因是什么?

2 个答案:

答案 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()
    )

感谢所有输入人员:)