2014-07-03 64 views
2

我正在使用Kendo網格,該網格將包含一個包含另一個網格的ClientDetailTemplate。內部(子)網格包含使用ClientTemplate的列。ClientDetailTemplate中包含客戶端模板未定義錯誤

ClientTemplate包含一個Kendo DropDownList。

問題是ClientTemplate(下拉列表)不被識別 - 我得到一個「未定義」的錯誤,所以細節區域無法顯示。但是,如果我從父網格的細節區域拉出內部網格,並將子網格放入它自己的div(與父網格分開),那麼它可以很好地工作。因此,在父網格的客戶端詳細信息模板中包含一個包含列客戶端模板的網格會導致其失敗,因此存在一些問題。

這裏是父網格的樣子:

<div class="row"> 
@(Html.Kendo().Grid<Rep.Models.BuildingViewModel>() 

        .Name("BuildingValidationGrid") 
        .Columns(columns => 
        { 
         columns.Bound(b => b.BuildingName); 
         columns.Bound(b => b.Region); 
         columns.Bound(b => b.City); 
         columns.Bound(b => b.Country); 
         columns.Bound(b => b.BuildingStatus); 
         columns.Bound(b => b.DateLastUploaded).Format("{0:dd-MMM-yyyy}"); 
        }) 
        .HtmlAttributes(new { style = "height: 500px;" }) 
        .Sortable() 
        .Scrollable() 
        .Groupable() 
        .ColumnMenu() 
        .Selectable() 
        .Resizable(resize => resize.Columns(true)) 
        .ClientDetailTemplateId("plan_client_template") 
        .Pageable(pageable => pageable 
         .Refresh(true) 
         .PageSizes(true) 
         .ButtonCount(5)) 
        .Filterable(filterable => filterable 
         .Extra(false) 
         .Operators(operators => operators 
          .ForString(str => str.Clear() 
           .StartsWith("Starts with") 
           .IsEqualTo("Is equal to") 
           .IsNotEqualTo("Is not equal to") 
          )) 
         ) 
        .Events(events => events.Change("onChange")) 
        .DataSource(datasource => datasource 
         .Ajax() 
          .Read(read => read.Action("BuildingsForValidation_Read", "Plan")) 
         .PageSize(100) 
         .ServerOperation(true) 

       ) 
) 

注意客戶明細模板, 「plan_client_template」。

的plan_client_template聲明爲這樣:

<script id="plan_client_template" type="text/kendo-tmpl"> 

@(Html.Kendo().Grid<Rep.Models.BuildingChangeValidationViewModel>() 
     .Name("CVGrid") 
     .Scrollable() 
     .Selectable() 
     .Editable(editable => editable.Mode(GridEditMode.InLine)) 
     .Columns(columns => 
     { 
      columns.Bound(b => b.Field); 
      columns.Bound(b => b.OldValue); 
      columns.Bound(b => b.NewValue); 
      columns.Bound(b => b.DateImported).Format("{0:dd-MMM-yyyy}"); 
      columns.Bound(b => b.BuildingChangeValidationStatusType).ClientTemplate("#=BuildingChangeValidationStatusType.Value#").Width(250); 
      columns.Command(command => command.Custom("Update").Click("updateValidation")); 
      columns.Command(command => { command.Edit(); }).Width(172); 
     }) 
     .DataSource(dataSource => dataSource 
      .Ajax() 
      .Model(model => 
      { 
       model.Id(b => b.BuildingId); 
       model.Field(b => b.BuildingChangeValidationStatusType).DefaultValue(
        ViewData["defaultBuildingChangeValidationStatuses"] as Rep.Common.LookupItem); 
      }) 
      .PageSize(5) 
     .Read(read => read.Action("BuildingValidations_Read", "Plan", new { buildingId = 0 })) 
     .Update(update => update.Action("BuildingValidations_Update", "Plan")) 

    ) 
     .ToClientTemplate() 
) 

請注意包含ClientTemplate, 「BuildingChangeValidationStatusType」 欄目。

的BuildingChangeValidationStatusType客戶端模板被定義爲:

@(Html.Kendo().DropDownList() 
.Name("BuildingChangeValidationStatusType") // Name of the widget should be the same as the name of the property 
.DataValueField("Id") 
.DataTextField("Value") 
    .DataSource(
     source => source.Read(read => 
       read.Action("BuildingValidationLookups_Read", "Plan").Data("getBuildingId") 
     ) 
     .ServerFiltering(true) 
    ) 
    .SelectedIndex(0)) 

此外,有趣的是,它的作品,如果我從父網格的客戶明細區域進行網格名稱,「CVGrid」,進入它的自己的股利。

關於發生了什麼以及爲什麼客戶端模板列未被看到的任何想法?

TIA!

回答

7

發生這種情況的原因是主網格試圖解析子網格中的模板。由於這是一個子網格,因此必須在模板語法中使用散列標籤,例如,

columns.Bound(b => b.BuildingChangeValidationStatusType).ClientTemplate("\\#=BuildingChangeValidationStatusType.Value\\#");