2012-10-11 109 views
0

我正在使用帶有AJAX綁定的Telerik Grid MVC。Telerik MVC Grid and Paging/Sorting/Filtering in database

我認爲,如果我提供IQueryable到網格,分頁/排序/過濾將在數據庫服務器完成。像這樣:

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

我創造了約10000文檔測試數據在數據庫中,和上命令導致了他們每個人拖進電網。顯然,這需要永遠。

電網通過AJAX的約束,像這樣:

​​

裏面選擇ActionMethod,檢查請求時(其形式),我看到網發送所需要的正常運作的所有信息:

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

但是當我進一步檢查發送給數據庫的SQL命令時,我發現只有SELECT命令存在,沒有WHERE,沒有ORDER BY,什麼也沒有,這會導致我的所有數據。

我想知道是否可以使頁面/排序/過濾自動工作,還是我需要將網格發送的信息自動轉換爲SQL命令。我的印象是,我所需要的只是提供IQueryable,而網格則完成剩下的工作。但是這對我不起作用。

也許我做錯了什麼,或者這可能甚至不可能?

回答

1

問題是使用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類。