可分类telerik网格+NHibernate、IQueryable和ASP.NET MVC



我正在尝试让telerik网格工作(分页工作正常(。我的视图代码如下:

@(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

我必须以某种方式将其与存储库结合起来(或者我在哪里读到,如果我使用IQueryable,telerik引擎会处理这个问题(。

不幸的是,在控制器被击中之前,我遇到了一个异常:

不支持指定的方法。

第8行:@(Html.Telerik((.网格(模型(

如果有帮助的话,我可以发布stacktrace。。。

不管怎样,有人使用NHibernate、IQueryable和ASP.NET MVC(我实际上使用的是sharp架构2.0 RC(实现了这一点。

谢谢!

Christian

我昨天刚刚做了这个。Telerik制作了一个非常有用的代码示例:http://www.telerik.com/community/code-library/aspnet-mvc/grid/nhibernate-binding.aspx

需要指出的几点:

  • 你需要使用Nhibernate 3.x,否则过滤将无法工作
  • 你不需要有寻呼代码,telerik gridcommand包含这些信息并将其插入IQueryable中
  • 这只适用于客户端ajax绑定,看起来应该是这样的:.DataBinding(dataBinding => dataBinding.Ajax().Select("index", "mycontroller"))
  • 当您使用ajax绑定时,您不需要将模型传递到网格,而是指定模型的类型,如下所示:.Grid<ItemRowViewModel>()

在一个有40万行的网格中,它对我来说效果非常好。如果你在设置它时遇到任何问题,请告诉我。

最新更新