繁体   English   中英

没有网格的MVC3分页和排序?

[英]MVC3 paging and sorting without grid?

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

实施起来会很难吗? 我应该坚持使用现有的Grid解决方案,例如WebGrid或MVCContrib网格吗?

我写了一个扩展方法来分页清单:

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

杰森答案的重要说明。

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

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

如果使用LINQ则可以使用OrderByThenBy方法进行排序,并使用Skip and Take方法进行分页。 如果在存储库或IQueryable Controller上执行此操作,则可以确保仅拉回所需的数据,而不是拉回所有数据然后进行排序。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM