2011-07-26 82 views
0

我想知道是否可以使用@foreach Razor語法而不是使用特定的Grid控件來實現數據的分頁和排序。MVC3分頁和無網格排序?

難以實施嗎?我應該堅持使用現有的網格解決方案,例如WebGrid或MVCContrib網格嗎?

回答

2

我寫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); 
1

如果使用LINQ那麼你可以使用OrderByThenBy方法排序和SkipTake方法分頁。如果您在存儲庫中執行此操作,或者在IQueryable上執行Controller,則可以確保只將所需的數據撤回,而不是全部拉出然後進行排序。

2

Jason的答案的重要說明。

您不應該使用ToList方法,因爲它會對內存消耗和整體性能產生負面影響。

您還應該檢查IEnumerable對象是否確實是IQueryable,並在使用擴展方法Skip and Take之前將其轉換爲後一類型。這將確保查詢提供程序將負責生成適當的sql以從數據庫中進行選擇,而不是遍歷所有記錄。

1

我不認爲OP是要求服務器端代碼。 您可以使用tablesorter進行排序。 至於分頁,我會建議在URL上追加頁碼,並限制在服務器端的數據。