Используя встроенное редактирование из сетки кендо (v 2017.3.913), шаблон редактора, используемый для раскрывающегося списка, не использует идентификатор свойства для установки выбранного значения в списке (или это другая проблема, но связанная).
Я попробовал несколько решений из однотипных вопросов SO, но ничто не дало ожидаемых результатов.
сетка кендо
//ParentOrganization is the target property
@(Html.Kendo().Grid<OrganizationGridViewModel>()
.Name("organizationGrid")
.Columns(columns =>
{
columns.Bound(o => o.Id).Width(150).Hidden(true);
columns.Bound(o => o.Name);
columns.Bound(o => o.ParentOrganization).ClientTemplate("#= (ParentOrganization.Id == 0) ? ' ' : ParentOrganization.Name #").EditorTemplateName("ParentOrganization");
columns.Bound(o => o.OrganizationTypeDescription).Width(165);
columns.Command(command =>
{
command.Edit().Text(" ").HtmlAttributes(new { title = "Edit Organization" });
command.Destroy().Text(" ").HtmlAttributes(new { title = "Delete Organization" });
}).Width(250);
})
.ToolBar(toolbar => toolbar.Create().Text("New"))
.Editable(editable => editable.Mode(GridEditMode.InLine).ConfirmDelete("Are you sure you want to delete this organization?")
.DisplayDeleteConfirmation("Organization deleted"))
...
Поскольку связанный столбец является навигационным объектом (в отличие от примитивного типа), я использую [UIHint]
в модели представления для указания на шаблон редактора, чтобы объект отображался правильно.
видовая модель, используемая в сетке
public class OrganizationGridViewModel
{
...
// NOTE: the Organization object has "Id" and "Name" properties
[UIHint("ParentOrganization")]
public Organization ParentOrganization { get; set; }
}
редактор шаблонов
@(Html.Kendo().DropDownList()
.Name("ParentOrganization")
.DataTextField("Text")
.DataValueField("Value")
.BindTo((IEnumerable) ViewData["OrganizationSelectList"])
)
И, наконец, данные, используемые раскрывающимся списком:
var orgSelectList = organizations.Select(n => new SelectListItem
{
Text = n.Name,
Value = n.Id.ToString()
}).ToList();
ViewData["OrganizationSelectList"] = new SelectList(orgSelectList, "Value", "Text");
Примечание
Я также попытался создать SelectList с использованием «Id» и «Name» (также распространял изменение в редакторе - заменил «Value» и «Text»), чтобы он выровнялся с объектом ParentOrganization
, но это закончилось создание "неопределенных" элементов списка.
orgSelectItems.AddRange(organizations.Select( n => new BaseSelectItem
{
Id = n.Id,
Name = n.Name
}));
ViewData["OrganizationSelectList"] = new SelectList(orgSelectList, "Id", "Name");