2009-07-09 69 views
13

我通過googling發現的大多數ASP.NET MVC分頁解決方案看起來像是以IEnumerable集合的形式從數據庫表中獲取所有行,然後在IEnumerable集合上執行一些分頁轉換,然後將結果返回給視圖。我希望能夠在數據庫端進行分頁,但仍然有一些分頁類來執行頁碼計算和HTML生成。那裏有解決方案嗎?或者是我一直在看的這樣做,但我沒有看到它,因爲我看着他們錯了?有沒有在數據庫中進行分頁的ASP.NET MVC的分頁解決方案?

這裏就是我一直在尋找:

+0

這真的沒有任何關係的ASP.NET MVC ... – 2009-07-09 18:31:40

+0

你是正確的,但我沒有在jvanderh和克雷格的回答之後才知道這一點。對於任何混淆抱歉。 – gabe 2010-05-21 15:47:49

回答

14

看看顧的Nerdinner樣本。

var upcomingDinners = dinnerRepository.FindUpcomingDinners(); 
var paginatedDinners = upcomingDinners.Skip(10).Take(20).ToList(); 

即使FindUpcomingDinners()獲得所有即將到來的晚餐,查詢未在數據庫中執行,直到你的下一行調用ToList()。這就是你跳過10行後,只有
接下來20.

5

你錯了。 PagedList將在數據庫服務器上執行,因爲它具有IQueryable擴展。

+0

那麼控制器動作語法是什麼?我一直看到的一切都像productRepository.GetAllProducts()。ToPagedList(pageIndex,pageSize)。 – gabe 2009-07-09 17:36:37

+1

是的,這是正確的。這會將所選頁面**僅轉換爲IEnumerable。分頁是通過IQueryable在DB服務器上完成的。伯爵同上。 – 2009-07-09 18:00:47

3

ScottGu在Asp.Net(包括MVC)中使用了LINQ的多部分博客系列。我建議閱讀從第1部分開始的整個系列,但Part 3正好涵蓋了您要查找的內容 - 標題爲「調查我們的查詢結果」的部分專門討論數據庫中的分頁。

2

實現一個採用@StartPage和@PageSize參數的存儲過程會不會更高效?

這種方式,你只檢索,實際上是正在使用

只是有一個名爲TOTALCOUNT或類似的東西,讓你知道有多少個頁面鏈接到創建和各個環節onclick事件將通過out參數數據的子集頁碼的JavaScript函數將異步加載更多的數據

容易的股利或其他HTML元素