我想知道是否可以使用@foreach Razor语法而不是使用特定的网格控件来实现数据的分页和排序。
难以实施吗?我应该坚持使用现有的网格解决方案,例如WebGrid或MVCContrib网格吗?
答案 0 :(得分:2)
我为pagin my lists写了一个扩展方法:
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 :(得分:2)
杰森回答的重要提示。
您不应该使用ToList方法,因为它会对内存消耗和整体性能产生负面影响。
在使用扩展方法Skip和Take之前,您还应检查IEnumerable对象是否确实是IQueryable并将其强制转换为后一种类型。这将确保Query提供程序将负责生成适当的sql以从数据库中进行选择,而不是迭代所有记录。
答案 2 :(得分:1)
如果您使用LINQ
,则可以使用OrderBy
和ThenBy
方法进行排序,使用Skip
和Take
方法进行分页。如果您在存储库中执行此操作,或在Controller
上IQueryable
执行此操作,则可以确保仅撤回所需数据,而不是全部拉出然后排序。
答案 3 :(得分:1)
我不认为OP要求服务器端代码。 您可以使用tablesorter进行排序。 对于分页,我建议在URL上附加页码并限制服务器端的数据。