我想知道是否可以使用@foreach Razor語法而不是使用特定的Grid控件來實現數據的分頁和排序。MVC3分頁和無網格排序?
難以實施嗎?我應該堅持使用現有的網格解決方案,例如WebGrid或MVCContrib網格嗎?
我想知道是否可以使用@foreach Razor語法而不是使用特定的Grid控件來實現數據的分頁和排序。MVC3分頁和無網格排序?
難以實施嗎?我應該堅持使用現有的網格解決方案,例如WebGrid或MVCContrib網格嗎?
我寫pagin我的名單擴展方法:
public static class DataPager
{
public static IEnumerable<T> PageData<T>(this IEnumerable<T> source, int currentPage, int pageSize)
{
var sourceCopy = source.ToList();
if (sourceCopy.Count() < pageSize)
{
return sourceCopy;
}
return sourceCopy.Skip((currentPage - 1) * pageSize).Take(pageSize);
}
}
可能對你有用例如
var courses = List<Courses>(); // Get courses somehow...
int currentPage = 2;
int pageSize = 5;
var pagedCourses = courses.OrderBy(c => c.Course.Title).PageData(currentPage, pageSize);
如果使用LINQ
那麼你可以使用OrderBy
和ThenBy
方法排序和Skip
和Take
方法分頁。如果您在存儲庫中執行此操作,或者在IQueryable
上執行Controller
,則可以確保只將所需的數據撤回,而不是全部拉出然後進行排序。
Jason的答案的重要說明。
您不應該使用ToList方法,因爲它會對內存消耗和整體性能產生負面影響。
您還應該檢查IEnumerable對象是否確實是IQueryable,並在使用擴展方法Skip and Take之前將其轉換爲後一類型。這將確保查詢提供程序將負責生成適當的sql以從數據庫中進行選擇,而不是遍歷所有記錄。
我不認爲OP是要求服務器端代碼。 您可以使用tablesorter進行排序。 至於分頁,我會建議在URL上追加頁碼,並限制在服務器端的數據。