没有网格的MVC3分页和排序

本文关键字:分页 排序 MVC3 网格 | 更新日期: 2023-09-27 18:03:38

我想知道是否有可能使用@foreach Razor语法而不是使用特定的Grid控件来实现数据的分页和排序。

很难实现吗?我应该坚持现有的网格解决方案,如WebGrid或MVCContrib网格吗?

没有网格的MVC3分页和排序

我写了一个扩展方法来分页我的列表:

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);

关于Jason回答的重要提示

你不应该使用ToList方法,因为它会对内存消耗和整体性能产生负面影响。

你还应该检查IEnumerable对象是否确实是IQueryable,并在使用扩展方法Skip和Take之前将其转换为后一种类型。这将确保Query提供程序负责生成从数据库中选择的适当sql,而不是遍历所有记录。

如果使用LINQ,则可以使用OrderByThenBy方法进行排序,使用SkipTake方法进行分页。如果您在您的存储库或IQueryable上的Controller中这样做,您可以确保只拉回所需的数据,而不是拉出所有数据然后排序。

我不认为OP是要求服务器端代码。您可以使用tablesorter进行排序。至于分页,我建议在URL上附加页码,并限制您在服务器端的数据。