C# 没有网格的MVC3分页和排序?
我想知道是否可以使用@foreach Razor语法而不是使用特定的网格控件来实现数据分页和排序C# 没有网格的MVC3分页和排序?,c#,.net,asp.net-mvc-3,C#,.net,Asp.net Mvc 3,我想知道是否可以使用@foreach Razor语法而不是使用特定的网格控件来实现数据分页和排序 是否难以实施?我是否应该坚持使用现有的网格解决方案,例如WebGrid或MVCContrib网格?如果使用LINQ,则可以使用OrderBy和ThenBy方法进行排序和Skip和Take方法进行分页。如果您在存储库中或控制器上对IQueryable执行此操作,您可以确保只提取所需的数据,而不是全部提取然后进行排序。如果您使用LINQ,则可以使用OrderBy和ThenBy方法进行排序和Skip和Ta
是否难以实施?我是否应该坚持使用现有的网格解决方案,例如WebGrid或MVCContrib网格?如果使用
LINQ
,则可以使用OrderBy
和ThenBy
方法进行排序和Skip
和Take
方法进行分页。如果您在存储库中或控制器上对IQueryable
执行此操作,您可以确保只提取所需的数据,而不是全部提取然后进行排序。如果您使用LINQ
,则可以使用OrderBy
和ThenBy
方法进行排序和Skip
和Take
用于分页的方法。如果您在存储库中或在IQueryable
上的Controller
中执行此操作,则可以确保只提取所需的数据,而不是提取所有数据然后进行排序。我在列表中为pagin编写了一个扩展方法:
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);
}
}
公共静态类数据寻呼机
{
公共静态IEnumerable PageData(此IEnumerable源、int currentPage、int pageSize)
{
var sourceCopy=source.ToList();
if(sourceCopy.Count()
可能对你有用
var courses = List<Courses>(); // Get courses somehow...
int currentPage = 2;
int pageSize = 5;
var pagedCourses = courses.OrderBy(c => c.Course.Title).PageData(currentPage, pageSize);
var courses=List();//以某种方式获得课程。。。
int currentPage=2;
int pageSize=5;
var pagedCourses=courses.OrderBy(c=>c.Course.Title).PageData(currentPage,pageSize);
我在列表中为pagin编写了一个扩展方法:
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);
}
}
公共静态类数据寻呼机
{
公共静态IEnumerable PageData(此IEnumerable源、int currentPage、int pageSize)
{
var sourceCopy=source.ToList();
if(sourceCopy.Count()
可能对你有用
var courses = List<Courses>(); // Get courses somehow...
int currentPage = 2;
int pageSize = 5;
var pagedCourses = courses.OrderBy(c => c.Course.Title).PageData(currentPage, pageSize);
var courses=List();//以某种方式获得课程。。。
int currentPage=2;
int pageSize=5;
var pagedCourses=courses.OrderBy(c=>c.Course.Title).PageData(currentPage,pageSize);
Jason回答的重要提示
您不应该使用ToList方法,因为它会对内存消耗和总体性能产生负面影响
您还应该检查IEnumerable对象是否确实是IQueryable,并在使用扩展方法Skip和Take之前将其转换为后一种类型。这将确保查询提供程序将负责生成适当的sql以从数据库中进行选择,而不是迭代所有记录。Jason回答的重要注意事项
您不应该使用ToList方法,因为它会对内存消耗和总体性能产生负面影响
您还应该检查IEnumerable对象是否确实是IQueryable,并在使用扩展方法Skip和Take之前将其转换为后一种类型。这将确保查询提供程序将负责生成适当的sql以从数据库中进行选择,而不是迭代所有记录。我认为OP并不是在要求服务器端代码。
您可以使用它进行排序。
至于分页,我建议在URL上附加页码,并限制服务器端的数据。我不认为OP要求服务器端代码。
您可以使用它进行排序。
至于分页,我建议在URL上附加页码,并限制服务器端的数据