繁体   English   中英

Telerik MVC网格和数据库中的分页/排序/过滤

[英]Telerik MVC Grid and Paging/Sorting/Filtering in database

我正在使用带有AJAX绑定的Telerik Grid MVC。

我认为,如果我向网格提供IQueryable,那么分页/排序/过滤将在数据库服务器上完成。 像这样:

[GridAction]
public ActionResult Select()
{
    return View(new GridModel(Mapper.Map<IEnumerable<DokumentVM>>(db.Dokumenti)));        
}

我在数据库中创建了大约10000个文档的测试数据,并且上层命令导致每个文档拖入网格。 显然,这需要永远。

网格通过AJAX绑定,如下所示:

@(Html.Telerik().Grid<ViewModels.DokumentVM>()
.DataBinding(b => b.Ajax().Select("Select", "Dokument"))
.Pageable(p => p.PageSize(20))
.Sortable(s => s.SortMode(GridSortMode.MultipleColumn).OrderBy(m => { m.Add("Date").Descending(); m.Add("Number").Descending(); })))

在Select ActionMethod内部,在检查Request(其Form)时,我看到网格发送了正常运行所需的所有信息:

page:     1
size:     20
orderBy:  Date-desc~Number-desc

但是,当我进一步检查发送到数据库的SQL命令时,发现只有SELECT命令,没有WHERE,没有ORDER by,什么都没有,这使我所有的数据都减少了。

我想知道分页/排序/筛选是否有可能自动运行,还是我需要自己将网格发送的信息转换为SQL命令。 我的印象是,我所需要的只是提供IQueryable,而Grid会完成其余的工作。 但这对我不起作用。

也许我做错了什么,或者甚至没有可能?

问题是使用AutoMapper! 当您拨打此行时:

 return View(new GridModel(Mapper.Map<IEnumerable<DokumentVM>>(db.Dokumenti)));

首先,AutoMapper尝试将所有db.Dokumenti行转换为内存函数中的新形式。 之后,映射的数据将传递到GridModel。 有关分页和排序的所有事情都在此类内发生。

因此,您应避免在此级别使用AutoMapper并使用其他策略。 例如,您可以进行如下查询:

var q= from r in db.Dokumenti select new DokumentVM(){ ... }

然后将q变量传递到GridModel类中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM