Jquery 剑道网格细节模板两级深-深网格有时不绑定

Jquery 剑道网格细节模板两级深-深网格有时不绑定,jquery,asp.net-mvc,asp.net-mvc-4,kendo-ui,kendo-grid,Jquery,Asp.net Mvc,Asp.net Mvc 4,Kendo Ui,Kendo Grid,我有一个奇怪的问题,剑道网格中的细节模板。我有两个深度细节模板,大部分时间都在工作(听起来很奇怪)。有时,最深的网格不会毫无错误地绑定来自服务器的数据。当检查Firebug时,我可以看到Json响应显然是用正确的数据响应的,但是网格没有绑定数据(至少css类在标记中显示“t-no-data”)。不过,让我澄清一下,这只是偶尔发生,并非总是。我一直试图找出这种情况发生时的任何模式,但没有发现任何模式。下面是我的代码示例: <div> @(Html.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>

@(Html.Kendo().Grid())
.名称(“部门网格”)
.列(c=>
{
c、 绑定(e=>e.DepartmentCode).Hidden();
c、 绑定(e=>e.DepartmentName);
})
.ClientDetailTemplateId(“CesTmp”)
.DataSource(d=>d.Ajax().Model(Model=>Model.Id(p=>p.DepartmentCode)))
.Scrollable(s=>s.Enabled(true))
)
@(Html.Kendo().Grid())
.Name(“CesGrid#=部门代码”)
.列(c=>
{
c、 绑定(e=>e.CesCode).Hidden();
c、 绑定(e=>e.CesName);
})
.ClientDetailTemplateId(“ItemTmp”)
.DataSource(DataSource=>DataSource
.Ajax()
.Read(Read=>Read.Action(“GetCesData”、“Cesce”、new{depCode=“#=部门代码#”}).Data(“filterCes”)).Model(m=>m.Id(p=>p.CesCode))
.事件(ev=>ev.错误(“onErrorCes”))
)
.ToClient模板()
)
@(Html.Kendo().Grid())
.Name(“ItemGrid#=CesCode#”)
.列(列=>
{
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=“#=部门代码#)”,cesceCode=“#=CesCode#”})。数据(“filterItem”))
.事件(ev=>ev.错误(“onErrorCes”))
)
.ToClient模板()
)

有人知道是什么导致了这种奇怪的行为吗?

在激活“在源代码中显示线程”按钮后尝试调试

由于这个线程结构,我遇到了很多奇怪的问题。也许读取函数的顺序颠倒了


只是一个想法。

过了一会儿,我偶然发现了一个模式。最深的网格,CesceCode网格,根据选择的部门显示具有相同CesceCode的数据。因此,我必须为网格创建更复杂的ID,如果用户单击了具有相同ID的cesce网格,则网格ID不是唯一的。除了仅使用CesceCode og,还添加了部门代码以创建更复杂的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()
    )

@(Html.Kendo().Grid())
.Name(“ItemGrid##=部门代码###=CesCode#”)//
{
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=“#=部门代码#)”,cesceCode=“#=CesCode#”})。数据(“filterItem”))
.事件(ev=>ev.错误(“onErrorCes”))
)
.ToClient模板()
)


感谢您的所有输入人员:)

也许您可以尝试使用生成的javascript重现这一点(然后您可以在读取操作中执行手动ajax请求,并记录数据和其他可能有助于诊断这一问题的内容);您是否尝试过在浏览器中调试?e、 g.查看使用什么调用.success方法,以及之后会发生什么?(理想情况下使用未统一的剑道UI源代码)请确保网格ID(名称)始终是唯一的。在不同的浏览器中检查此行为。感谢各位的评论。我想我找到了这个特殊问题的解决方案,但是我发现调试很困难,但是最终解决方案当然很简单。稍后我会为这个问题创建一个答案,但我会向您咨询您的意见。谢谢您的评论@user2688655,但我偶然发现了解决方案。今天晚些时候,我会在这个帖子上创建一个答案:)我会为你的麻烦找到答案。@Majid很高兴听到:)