没有网格的MVC3分页和排序
本文关键字:分页 排序 MVC3 网格 | 更新日期: 2023-09-27 18:03:38
我想知道是否有可能使用@foreach Razor语法而不是使用特定的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);
关于Jason回答的重要提示
你不应该使用ToList方法,因为它会对内存消耗和整体性能产生负面影响。
你还应该检查IEnumerable对象是否确实是IQueryable,并在使用扩展方法Skip和Take之前将其转换为后一种类型。这将确保Query提供程序负责生成从数据库中选择的适当sql,而不是遍历所有记录。
如果使用LINQ
,则可以使用OrderBy
和ThenBy
方法进行排序,使用Skip
和Take
方法进行分页。如果您在您的存储库或IQueryable
上的Controller
中这样做,您可以确保只拉回所需的数据,而不是拉出所有数据然后排序。
我不认为OP是要求服务器端代码。您可以使用tablesorter进行排序。至于分页,我建议在URL上附加页码,并限制您在服务器端的数据。