我正在使用一个包含另一个网格的 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/