2014-01-08 48 views
4

我有一個奇怪的網格細節模板奇怪的問題。我有兩個深層的細節模板,並且大部分時間都在工作(聽起來很奇怪)。有時,最深的網格不會沒有任何錯誤地綁定來自服務器的數據。在檢查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> 

沒有人有任何想法可能是什麼造成這種奇怪的行爲?

+1

也許你可以嘗試重現這與生成的JavaScript(那麼你可以做手動ajax請求在讀取操作和記錄數據和其他東西w這可能有助於診斷);你有沒有嘗試在瀏覽器中進行調試?例如查看.success方法被調用的內容以及之後會發生什麼? (理想情況下與未統一的Kendo UI來源) –

+1

請確保始終您的網格ID(名稱)是唯一的。在不同的瀏覽器中檢查此行爲。 –

+0

謝謝你的評論傢伙。我想我找到了解決這個問題的方法,但是我發現很難調試,但最終解決方案當然很簡單。 我將在稍後爲此創建一個答案,但我會提出您的意見。 – gardarvalur

回答

0

過了一段時間我偶然發現了一個模式。最深的網格CesceCode-grid使用相同的CesceCode顯示數據,具體取決於所選的部門。因此,我必須爲網格創建更復雜的ID,如果用戶點擊具有相同ID的cesce網格,則網格ID不是唯一的。而不是僅使用CesceCode og還添加了DepartmentCode來創建更復雜的ID。 Here's我用搶電網的腳本的例子:

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

感謝您的所有輸入的傢伙:)

1

嘗試在激活「在源中顯示線程」按鈕後進行調試。

因爲這個線程結構,我有許多奇怪的問題。可能讀取函數的順序顛倒了。

只是一個想法。

+1

感謝您對@ user2688655的評論,但我偶然發現了這個解決方案。我會在今天晚些時候在這個線程上創建一個答案:) 我會解決你的問題。 – gardarvalur