首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.NET MVC中进行分页?

如何在ASP.NET MVC中进行分页?
EN

Stack Overflow用户
提问于 2009-01-15 09:50:21
回答 7查看 170.3K关注 0票数 88

在ASP.NET MVC中,最受欢迎和最简单的分页方式是什么?也就是说,将列表分解成几个可浏览页面的最简单方法是什么。

举个例子,假设我从数据库/网关/存储库获得了一个元素列表,如下所示:

代码语言:javascript
复制
public ActionResult ListMyItems()
{
    List<Item> list = ItemDB.GetListOfItems();
    ViewData["ItemList"] = list;

    return View();
}

为了简单起见,我只想为我的操作指定一个页码作为参数。如下所示:

代码语言:javascript
复制
public ActionResult ListMyItems(int page)
{
   //...
}
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-01-15 10:11:49

那么,数据来源是什么?您的操作可能需要一些默认参数,例如

代码语言:javascript
复制
ActionResult Search(string query, int startIndex, int pageSize) {...}

在路由设置中默认为startIndex为0,pageSize为(比方说) 20:

代码语言:javascript
复制
        routes.MapRoute("Search", "Search/{query}/{startIndex}",
                        new
                        {
                            controller = "Home", action = "Search",
                            startIndex = 0, pageSize = 20
                        });

要拆分提要,可以很容易地使用LINQ:

代码语言:javascript
复制
var page = source.Skip(startIndex).Take(pageSize);

(或者,如果您使用"pageNumber“而不是”startIndex“,则执行乘法)

使用LINQ-toSQL,EF等-这也应该“组合”到数据库中。

然后,您应该能够使用操作链接到下一页(等):

代码语言:javascript
复制
<%=Html.ActionLink("next page", "Search", new {
                query, startIndex = startIndex + pageSize, pageSize }) %>
票数 108
EN

Stack Overflow用户

发布于 2009-01-15 11:52:23

我也遇到了同样的问题,并且找到了一个非常优雅的解决方案。

http://blogs.taiga.nl/martijn/2008/08/27/paging-with-aspnet-mvc/

在你的控制器中,调用看起来像这样:

代码语言:javascript
复制
return View(partnerList.ToPagedList(currentPageIndex, pageSize));

在你看来:

代码语言:javascript
复制
<div class="pager">
    Seite: <%= Html.Pager(ViewData.Model.PageSize, 
                          ViewData.Model.PageNumber,
                          ViewData.Model.TotalItemCount)%>
</div>
票数 15
EN

Stack Overflow用户

发布于 2015-06-12 14:59:35

控制器

代码语言:javascript
复制
 [HttpGet]
    public async Task<ActionResult> Index(int page =1)
    {
        if (page < 0 || page ==0 )
        {
            page = 1;
        }
        int pageSize = 5;
        int totalPage = 0;
        int totalRecord = 0;
        BusinessLayer bll = new BusinessLayer();
        MatchModel matchmodel = new MatchModel();
        matchmodel.GetMatchList = bll.GetMatchCore(page, pageSize, out totalRecord, out totalPage);
        ViewBag.dbCount = totalPage;
        return View(matchmodel);
    }

BusinessLogic

代码语言:javascript
复制
  public List<Match> GetMatchCore(int page, int pageSize, out int totalRecord, out int totalPage)
    {
        SignalRDataContext db = new SignalRDataContext();
        var query = new List<Match>();
        totalRecord = db.Matches.Count();
        totalPage = (totalRecord / pageSize) + ((totalRecord % pageSize) > 0 ? 1 : 0);
        query = db.Matches.OrderBy(a => a.QuestionID).Skip(((page - 1) * pageSize)).Take(pageSize).ToList();
        return query;
    }

用于显示总页数的视图

代码语言:javascript
复制
 if (ViewBag.dbCount != null)
    {
        for (int i = 1; i <= ViewBag.dbCount; i++)
        {
            <ul class="pagination">
                <li>@Html.ActionLink(@i.ToString(), "Index", "Grid", new { page = @i },null)</li> 
            </ul>
        }
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/446196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档