[英]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.