Kendo UI MVC Grid — источник данных мешает шаблону столбца

У меня есть вспомогательная сетка Kendo UI MVC, в которой возникает проблема с шаблонным столбцом. Моя проблема в том, что я НЕ хочу использовать вызовы на стороне сервера для фильтрации или сортировки. Когда я отключаю источник данных на стороне сервера, мой шаблон не отображается для столбца «имя». Вот мой код:

@(Html.Kendo().Grid(Model.Contacts)
    .Name("contactGrid")
    .Columns(c =>
    {
        c.Bound(p => p.Name).Title("Contact Name").Template(@<text><a href="/contact-details/@item.Id" target="_blank">@item.Name</a></text>);
        c.Bound(p => p.Id).Title("Unique ID");
    })
    .Sortable(s => s.SortMode(GridSortMode.SingleColumn).AllowUnsort(true))
    .Scrollable(s => s.Height(430))
    .Filterable(f => f.Extra(false).Operators(o => o.ForString(s => s.Contains("Contains"))))
    .DataSource(d => d.Ajax().ServerOperation(false))
)

Если я закомментирую источник данных следующим образом:

//.DataSource(d => d.Ajax().ServerOperation(false))

тогда шаблон корректно работает в столбце "имя", но страница выполняет обратную передачу, что является излишним для целей сетки. Если я оставлю это без комментариев, то все ячейки в столбце «имя» будут отображаться как чистый текст (тег привязки отсутствует), но у меня есть сортировка и фильтрация на стороне клиента.

Что мне нужно изменить, чтобы разрешить шаблон в столбце «имя» и иметь сортировку и фильтрацию на стороне клиента?


person Halcyon    schedule 02.12.2014    source источник


Ответы (1)


.DataSource(d => d.Ajax().ServerOperation(false))

Делает вывод, что ваша сетка будет загружать свои данные через ajax удаленно, но вы предоставляете данные (Model.Contacts) для сетки в самом начале инициализации:

@(Html.Kendo().Grid(Model.Contacts)

При загрузке Model.Contacts в сетку с самого начала сетка считается привязанной к серверу, тогда как при предоставлении этого источника данных ваша сетка будет считаться связанной с ajax.

Согласно документации Kendo, сетка, связанная с ajax, не может использовать шаблоны сервера, что будет рассматриваться как ваш шаблон для столбца имени.

Если Model.Contacts действительно содержит все данные, которые вам нужно загрузить, я бы полностью удалил источник данных, поскольку у вас есть все необходимые данные.

Если вы хотите загрузить данные через ajax, вы должны удалить Model.Contacts и инициализировать сетку примерно так:

 @(Html.Kendo().Grid<Contact>()

и добавьте источник данных с настроенным методом чтения транспорта.

Ознакомьтесь с этим разделом FAQ по Kendo Grid (второй вопрос ниже):

http://docs.telerik.com/kendo-ui/aspnet-mvc/helpers/grid/faq

person Kyle Magilavy    schedule 03.12.2014