MVC快速分页

using System;

namespace CWHomeWebSite.Models
{
    public class PagingInfo
    {
        //项目总数量
        public int TotalItems { get; set; }
        //当前索引
        public int PageIndex { get; set; }
        //分页大小
        public int PageSize { get; set; }
        //页数
        public int PageCount
        {
            get
            {
                return (int)Math.Ceiling((decimal)TotalItems / PageSize);
            }
        }
    }
}

创建视图对应的ViewModel

using CWHomeWebSite.Data.Entities;
using System.Collections.Generic;

namespace CWHomeWebSite.Models
{
    public class PostViewModel
    {
        //博客集合
        public IEnumerable<Post> Posts { get; set; }
        //分页参数
        public PagingInfo PagingInfo { get; set; }
    }
}

处理Controller视图方法

public ActionResult Index(int pageIndex = 1, int pageSize = 2)
        {
            //获取当前分页数据集合
            var posts = this.repository.Posts
          .OrderBy(p=>p.UpdateTime) 
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize);

            //将当前ViewModel传递给视图
            return View(new PostViewModel
            {
                Posts = posts,
                PagingInfo = new PagingInfo
                {
                    TotalItems = this.repository.Posts.Count(),
                    PageIndex = pageIndex,
                    PageSize = pageSize
                }
            });
        }

在View中通过Html辅助器扩展方法处理PagingInfo

using CWHomeWebSite.Models;
using System;
using System.Web.Mvc;


namespace CWHomeWebSite.Helper
{
    public static class PagingHelper
    {
        //HtmlHelper扩展方法,用于分页
        public static MvcHtmlString Pagination(this HtmlHelper html, PagingInfo pageInfo,Func<PagingInfo,string> pageLinks)
        {
            var htmlString = pageLinks(pageInfo);
            
            return MvcHtmlString.Create(htmlString);
        }
    }
}
@model CWHomeWebSite.Models.PostViewModel
@using CWHomeWebSite.Helper

@{
    ViewBag.Title = "主页";
}

<!-- 博客列表 -->
<section id="one">
    <ul class="actions">
        @foreach (var post in Model.Posts)
        {
            <li>
                <header class="major">
                    <h2>
                        @post.Title <br />
                        | @post.CreateTime.ToShortDateString()
                    </h2>

                    <p>@post.Description</p>
                    <ul class="actions">
                        <li>@Html.ActionLink("更多", "Detail", "Home", new { @post.PostId }, new { @class = "button" })</li>
                    </ul>
                </header>
                <hr />
            </li>
        }

    </ul>

    <!--分页代码-->
    @Html.Pagination(Model.PagingInfo, (info) =>
   {
       var pagingString = "<ul class=\"actions small\">";
       for (var i = 1; i <= info.PageCount; i++)
       {
           if (i == info.PageIndex)
           {
               pagingString += "<li><a class=\"special\" href=\"#\">" + i + "</a></li>";
           }
           else
               pagingString += "<li><a class=\"normal\" href=\"" + Url.Action("Index", new { pageIndex = i, pageSize = info.PageSize }) + "\">" + i + "</a></li>";
       }
       pagingString += "</ul>";
       return pagingString;
   })

</section>

<!--最近作品-->
@Html.Action("RecentWorks", "Work")

url跳转:

@Url.Action("Index", "Home", new { id=1})“生成的html是:”生成的url为: /Home/Index/1“

 

        public int PageCount
        {
            get
            {
                var pageCount = 0;
                if (PageSize != 0)
                {
                    pageCount = RecordCount / PageSize + (RecordCount % PageSize == 0 ? 0 : 1);
                }
                return pageCount;
            }
        }

 

                //var orders = new List<Orders>();//订单实体集合
                //if (orderCodes.Count() <= 1000)
                //{
                //    orders = (await ordersService.GetOrdersByOrderCodesAsync(orderCodes.ToList())).ToList();
                //}
                //else//大于1000,分批查询
                //{
                //    int pageSize = 1000;
                //    int n = orderCodes.Count() / pageSize;
                //    for (int i = 1; i <= n + 1; i++)
                //    {
                //        var pageOrderCodes = orderCodes.Skip((i - 1) * pageSize).Take(pageSize).ToList();
                //        var queryorders = (await ordersService.GetOrdersByOrderCodesAsync(pageOrderCodes)).ToList();
                //        orders.AddRange(queryorders);
                //    }
                //}

 

posted @ 2016-03-06 06:57  BloggerSb  阅读(243)  评论(0编辑  收藏  举报