Я использую Kendo UI для ASP.NET Core. Я использую Kendo Grid, и мне нужны следующие функции для работы: сортировка, фильтрация, редактирование (со списком клиентов в ячейке). Оказывается, вам нужна модель сложного представления, чтобы шаблон редактора работал в соответствии с эту документацию, но сложная модель представления нарушает функциональность сортировки и фильтрации сетки. Поскольку сетка пытается сортировать и искать объект вместо одного поля.
У меня есть ViewModel, которая выглядит следующим образом:
public class ProjectViewModel
{
public int Id { get; set; }
public string Name { get; set; }
[UIHint("CustomersEditor")]
public CustomerViewModel Customer { get; set; }
}
Я использую его в качестве модели для своей сетки кендо:
@(Html.Kendo().Grid(Model)
.Name("grid")
.Columns(columns =>
{
columns.Bound(c => c.Customer).Title("Customer").ClientTemplate("#= Customer.Name#");
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(300);
})
.Editable(editable => editable.Mode(GridEditMode.InLine))
.Sortable()
.Filterable(ftb => ftb.Mode(GridFilterMode.Row))
.Pageable(pageable => pageable
.Refresh(true)
.PageSizes(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Model(model =>
{
model.Id(item => item.Id);
})
.Create(update => update.Action("Projects_Create", "Projects"))
.Read(read => read.Action("Projects_Read", "Projects"))
.Update(update => update.Action("Projects_Update", "Projects"))
.Destroy(update => update.Action("Projects_Destroy", "Projects"))
)
)
Как видите, я указываю свойство Customer в качестве связанного столбца и устанавливаю для шаблона клиента значение Customer.Name, когда не в режиме редактирования.
Причина, по которой я устанавливаю свойство столбца для объекта Customer, заключается в том, что я использую шаблон редактора ComboBox внутри этого столбца, когда сетка находится в режиме редактирования. Я считаю, что это единственный способ сделать это согласно этой документации.
@(Html.Kendo().ComboBoxFor(x => x)
.Placeholder("Select a customer...")
.DataValueField("Id")
.DataTextField("Name")
.BindTo((List<CustomerViewModel>)ViewData["customers"])
)
С приведенной выше настройкой все работает, за исключением того факта, что сортировка/фильтрация не работает из-за столбца «Клиент».
Поскольку я считаю, что я никак не могу указать сетке использовать Customer.Name для сортировки/фильтрации вместо Customer. Могу ли я в любом случае получить шаблон редактора ComboBox с плоской моделью представления?