[英]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
则可以使用OrderBy
和ThenBy
方法进行排序,并使用Skip
and Take
方法进行分页。 如果在存储库或IQueryable
Controller
上执行此操作,则可以确保仅拉回所需的数据,而不是拉回所有数据然后进行排序。
我不认为OP正在要求服务器端代码。 您可以使用tablesorter进行排序。 至于分页,我建议在URL上附加页码,并在服务器端限制您的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.