сортируемая сетка Telerik + NHibernate, IQueryable и ASP.NET MVC - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь заставить работать Telerik Grid (пейджинг работает нормально). Мой код вида выглядит так:

@(Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
    columns.Bound(o => o.ItemName.Text).Title("Name");
})
.Pageable(pager => pager.PageSize(20))
.Sortable()
)

Мой контроллер выглядит так:

public ActionResult Index(GridCommand command)
{
   return View(BlaRepository.GetBlas(command.PageSize, command.Page));
}

Хранилище выглядит так:

public IQueryable<Bla> GetBlas(int PageSize, int Page)
{
    var query = (from e in Session.Query<Bla>() select e).AsQueryable();

    return query.Skip((Page - 1) * PageSize).Take(PageSize);
}

Я понимаю, что GridCommand будет содержать вещи для ее сортировки:

command.SortDescriptors

и я должен каким-то образом объединить это с репозиторием (или я должен ???, когда я где-то читал, что механизм telerik позаботится об этом, если я использую IQueryable).

К сожалению, я получаю исключение еще до того, как контроллер будет запущен:

Указанный метод не поддерживается.

Строка 8: @ (Html.Telerik (). Сетка (модель)

Я могу опубликовать трассировку стека, если это поможет ...

Так или иначе кто-то заставил это работать, используя NHibernate, IQueryable и ASP.NET MVC (я фактически использую острую архитектуру 2.0 RC).

Спасибо!

Christian

1 Ответ

2 голосов
/ 20 июля 2011

Я только что сделал это вчера. Вот пример кода этой работы, который Telerik собрал, который был очень полезен: http://www.telerik.com/community/code-library/aspnet-mvc/grid/nhibernate-binding.aspx

Несколько вещей, на которые стоит обратить внимание:

  • Вам необходимо использовать Nhibernate 3.x. В противном случае фильтрация не будет работать
  • Вам не нужно иметь код подкачки. Команда telerik grid содержит эту информацию и вставляет ее в IQueryable для вас
  • Это работает только с привязкой ajax на стороне клиента, это должно выглядеть примерно так: .DataBinding(dataBinding => dataBinding.Ajax().Select("index", "mycontroller"))
  • Поскольку вы используете привязку ajax, вам не нужно передавать модель в сетку, вместо этого вы указываете тип модели, например: .Grid<ItemRowViewModel>()

Это сработало очень хорошо для меня в сетке с 400 000 строк. Дайте мне знать, если у вас возникнут проблемы с настройкой.

...