繁体   English   中英

使用LINQ进行ASP MVC分页?

[英]ASP MVC Paging with LINQ?

我有100条记录。 我想要LINQ:

int pageNumber = get from user; // for example 2 , 3 ,...
if pageNumber == 2
   return records 20 to 29

谢谢!

您想要的可能是以下内容:

var itemsToShow = items.OrderBy(p => p.Id)
                       .Skip((currentPage - 1) * numPerPage)
                       .Take(numPerPage);

在通过Id属性对页面进行排序的位置上,您具有变量currentPage以及当前页面的数量,而numPerPage则包含每页的项目数。

然后,您可能希望创建一个包含分页信息的类型,以使您的生活更轻松。 就像是

public class PagingInfo
{
     public int ItemsPerPage { get; set; }
     public int NumItems { get; set; }
     public int CurrentPage { get; set; }
     public int TotalPages
     {
         get
         {
             return Math.Ceiling((double)NumItems/ItemsPerPage);
         }
     }
}

然后,您的currentPage将是pagingInfo.CurrentPage而您的numPerPage将是pagingInfo.ItemsPerPage 此外,您还有一个属性可以获取总页数,这很有用。 这是一种好方法,因此您可以传输有关视图模型上的页面调度的信息。

int Page = 1;
int RecordsPerPage = 10;
var q = yourQuery.Skip((Page - 1) * RecordsPerPage).Take(RecordsPerPage);

我建议使用PagedList.MVC,它在Nuget上提供了一个免费的库巫婆:这是一个示例:这将是您的操作:

 public ActionResult Index(int page = 1)
    {
        //_db is my sample data context but paged list works for any IEnumerable
        //since this is an extension method
        var model = 
            _db.Comments
            .OrderByDescending(c => c.Date)
            .ToPagedList(page, 10);

        return View(model);
    }

我将视图的模型设置为IPagedList,这是视图:很好的是,它将自动生成页面链接。

<div class="pager">
    @Html.PagedListPager(Model, page => Url.Action("Index", new { page }),    PagedListRenderOptions.ClassicPlusFirstAndLast)
</div>

其可自定义(通过CSS)。 这是nuget页面: PagedList.MVC nuget页面

暂无
暂无

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

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