asp.net-mvc - 包含在 ClientDetailTemplate 中时,客户端模板未定义错误

标签 asp.net-mvc kendo-ui kendo-grid

我正在使用一个包含另一个网格的 ClientDetailTemplate 的 Kendo 网格。内部(子)网格包含一个使用 ClientTemplate 的列。

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”从父网格的客户端详细信息区域添加到它自己的 div 中,它就会起作用。

关于发生了什么以及为什么看不到客户端模板列的任何想法?

TIA!

最佳答案

发生这种情况的原因是主网格试图解析子网格中的模板。由于这是一个子网格,因此必须在模板语法中使用哈希标签,例如,

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

关于asp.net-mvc - 包含在 ClientDetailTemplate 中时,客户端模板未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560198/

相关文章:

asp.net-mvc - ASP.NET Web 优化 - 不捆绑的缩小

c# - Kendo UI 日期时间

javascript - 何时在 Kendo UI 数据源和 Observable 中使用以在模板中显示数据

kendo-ui - 当存在多个标题行时,Kendo 网格分页不起作用

kendo-ui - Kendo Grid MVC 无法将列缩小到超出某个限制

c# - 未使用 ASP.NET MVC EditorTemplate

Jquery Ajax 仅在 Debug模式下工作

jquery - 使用 jquery 自动将数据从服务器填充到文本框

kendo-ui - 初始化后更改小部件的项目模板

javascript - KendoUI 列模板中的条件未按预期工作