MVC分页使用(不使用控件)

分页是项目开发中最常用的功能

四要素:1.总数据数量(totalCount)2. 总页码(PageCount ) 3 当前页码(PageIndex ) 4 每页显示的数据数量(pageSize)

分页在项目中肯定是不止一个页面去使用的,所以效率方面应该将分页的方法写入 common共用的类方法中,而这个成员变量就是这4要素,之后通过类new一个对象来可以调用出这4个要素去使用。

具体思想:将总数据筛选出来当前页码所需数据,并且总页码是一直保留,当前页码通过样式区分显示

公共方法:

public class PagingHelp<T>
    {

       //构造函数
        public PagingHelp(int pageSize, IEnumerable<T> dataSource, int totalCount)
        {
            this.PageSize = pageSize > 1 ? pageSize : 1;
            this.DataSource = dataSource;
            PageCount = (int)Math.Ceiling(totalCount / (double)pageSize);
        }
        #region 分页四要素 四个成员变量

        /// <summary>
        /// 分页源数据
        /// </summary>
        public IEnumerable<T> DataSource { get; private set; }
        /// <summary>
        /// 每页记录数量
        /// </summary>
        public int PageSize { get; private set; }
        /// <summary>
        /// 当前页数
        /// </summary>
        public int PageIndex { get; set; }
        #endregion
        //分页总数
        public int PageCount { get; private set; }
        //是否有前一页
        public bool HasPrev { get { return PageIndex > 1; } }
        //是否有后一页
        public bool HasNext { get { return PageIndex < PageCount; } }
        public IEnumerable<T> GetPagingData()
        {
             return DataSource.Skip((PageIndex - 1) * PageSize).Take(PageSize);//EF方法 
        }
    }

控制器方法调用:

var DataSource=数据源;

 PagingHelp<ViewModel> pageMod =
                new PagingHelp<ViewModel>(20, DataSource, DataSource.count) { PageIndex = pageIndex };
            return View(pageMod);

页面就可以使用这个分页对象来使用: 命名空间自己要加上

@model PagingHelp<ViewModel>  

@{       
        List<ViewModel> List = Model.GetPagingData().ToList();

    }

  <thead>
        <tr >
            <th ></th> 
        </tr>
    </thead>
    <tbody>
        @if (List.Count > 0)
        {
            foreach (var item in List)
            {
                <tr>          
                    <td>
                        @item.列名
                    </td>           
                </tr>
            }
            <tr>   (分页页码显示的逻辑判段前4页后5页...最后一页  样式和页码显示效果可自定义)
                <td colspan="9">
                    <div style="text-align: center;">
                        <div class="pages" style="width:100%;">
                            @if (Model.PageCount > 0)
                            {
                                <a href="javascript:void(0);" οnclick="Search(1)" style="margin-right:5px;">Home</a>
                            }
                            @{
                            Int32 shouNum = 10;
                            int first = Model.PageIndex - 4;
                            int last = Model.PageIndex + 5;
                            if (first <= 0)
                            {
                                first = 1;
                            }
                            if (last > Model.PageCount)
                            {
                                last = Model.PageCount;
                            }
                            if (last < shouNum && Model.PageCount >= shouNum)
                            {
                                last = shouNum;
                            }

                            if (first + (shouNum - 1) > Model.PageCount && Model.PageCount >= shouNum)
                            {
                                first = Model.PageCount - shouNum + 1;
                            }
                            }
                            @for (int i = first; i <= last; i++)
                            {
                                if (i == Model.PageIndex)
                                {
                                    <span class="cpb" style="margin-right:5px;">@i</span>
                                }
                                else
                                {
                                    <a href="javascript:void(0);" οnclick="Search(@i)" style="margin-right:5px;">@i</a>
                                }
                            }
                            @if (Model.PageCount != last)
                            {
                                <span style="margin-right:5px;">......</span>
    <a href="javascript:void(0);" οnclick="Search(@Model.PageCount)" style="margin-right:5px;">@Model.PageCount</a>
                            }
                            @if (Model.PageCount > 0)
{
    <a href="javascript:void(0);" οnclick="Search(@Model.PageCount)" style="margin-right:5px;">Last</a>
}
                        </div>
                    </div>
                </td>

            </tr>
        }
        else
        {
            <tr><td colspan="8" align="center">-No Data-</td></tr>
        }
    </tbody>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值