C# MVC+NHibernate 分页

一、页面代码,分为三部分,一是查询条件部分,二是数据部分,二是页码条

     <div id="ticketoutquery">
            <table>
                <tr>
                    <td style=" 70px; text-align: right">
                        订票单号:
                    </td>
                    <td style="text-align: left">
                        @Html.TextBoxFor(s => s.TicketNo)
                    </td>
                  
                    <td style=" 70px; text-align: right">
                        出票时间:
                    </td>
                    <td>
                        @Html.TextBoxFor(s => s.CreateDateStart, new { @class = "datepicker" })
                    </td>
                    <td>
                        @Html.TextBoxFor(s => s.CreateDateEnd, new { @class = "datepicker" })
                    </td>
                    <td style=" 70px; text-align: right">
                        <input type="button" id="tbQueryticketout" onclick="doQueryticketoutProcessing(1)" class="btn btn-primary"
                               value="查询" />
                    </td>
                </tr>
            </table>
        </div>
    <div id="TaskList">
        @Html.Raw(@ViewData["TaskLists"])
    </div>
    
    <div class="page_nav" id="pageBar" style="margin:0,auto">
        @Html.Raw(OilDigital.TicketSys2.Web.PageBarHelper.GetPagaBar((int)ViewData["PageIndex"], (int)ViewData["PageCount"], (int)ViewData["recoredCount"]))
    </div>

二、页面条码类封装如下:

 public class PageBarHelper
    {
        public static string GetPagaBar(int pageIndex, int pageCount, int recoredCount)
        {
            if (pageCount == 1)
            {
                return string.Empty;
            }
            int start = pageIndex - 5;//计算起始位置.要求页面上显示10个数字页码.
            if (start < 1)
            {
                start = 1;
            }
            int end = start + 9;//计算终止位置.
            if (end > pageCount)
            {
                end = pageCount;
                //重新计算一下Start值.
                start = end - 9 < 1 ? 1 : end - 9;
            }
            StringBuilder sb = new StringBuilder();
            if (pageIndex > 1)
            {
                //sb.AppendFormat("<a href='NewList.aspx?pageIndex={0}'>上一页</a>", pageIndex - 1);、
                sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>上一页</a>", pageIndex - 1);
            }
            for (int i = start; i <= end; i++)
            {
                if (i == pageIndex)
                {
                    sb.Append(i);
                }
                else
                {
                    sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>{0}</a>", i);
                }
            }
            if (pageIndex < pageCount)
            {
                sb.AppendFormat("<a href='#'  onclick='doQueryticketoutProcessing({0})'>下一页</a>", pageIndex + 1);
            }
            if (recoredCount >0)
            {
                sb.AppendFormat(" <span>每页10条,共{0}条</span>", recoredCount);
            }
            return sb.ToString();
        }
    }

三、点击查询后会触发doQueryticketoutProcessing方法

function doQueryticketoutProcessing(pageIndex) {
    var ticketNoval = $('#TicketNo').val();  //订票单号
    var CreateDateStart = $('#CreateDateStart').val();   //出票时间
    var CreateDateEnd = $('#CreateDateEnd').val();   //出票时间
    if (pageIndex == null || pageIndex == undefined || pageIndex <1)
    {
        pageIndex = 1;
    }
    var type = $("#type").val();
    showMsg();
    $.ajax({
    type: "post",
            url: approvalUrl + "/GetProcessingTicketoutTaskListByQuery",
            data: { ReceiveNumber: ticketNoval, createDateStart: CreateDateStart, createDateEnd: CreateDateEnd, type: type, pageIndex: pageIndex },
                        datatype: "html",
            success: function (data) {
                hideMsg();
                if (data.ticketList == "") {
                $("#taskList").html("<h5>暂时无任务列表!</h5>");
                } else {
                $("#TaskList").empty();
                $("#TaskList").html(data.ticketList);
            }
            $("#pageBar").html(data.pageBar);
            },
            error: function (req, status, error) {
                hideMsg();
                        console.log("获取订票单失败,原因如下:
" + error);
                        }
                        });
                        }

三、后台除了查询的条件外,分页的参数主要是pageIndex 和 pageSize.   传入后台后返回总记录数 recoredCount   和 总页数pageCount   下面给出分页的核心代码

public static IQueryable<Ticket> GetByStateAndDateTime(string ReceiveNumber, string ticketState, DateTime startDate, DateTime endDate,int pageIndex,int pageSize)
        {
            IQueryable<Ticket> tickets = dao.GetQueryable().Where(s => s.StateCode == "已出票" && s.CreatedTime > startDate && s.CreatedTime < endDate);
            if (!string.IsNullOrEmpty(ReceiveNumber))
            {
                tickets = tickets.Where(s => s.ReceiveNumber == ReceiveNumber.Trim());
            }
            if(pageIndex!=0)
            {
                tickets = tickets.OrderBy(s=>s.CreatedTime).Skip((pageIndex - 1) * pageSize).Take(pageSize);
            }
            return tickets;

        }
pageCount计算方法
pageCount = Convert.ToInt32(Math.Ceiling((double)recoredCount / pageSize));

四、分页控件的css样式如下:

page_nav{clear:both; padding:15px 0; color:#666; font:normal 12px/24px Arial; text-align:center;}
.page_nav a{display:inline-block; height:22px; margin:0 2px; padding:0 8px; text-decoration:none; border:solid 1px #dbe5ee; -moz-border-radius:2px; -webkit-border-radius:2px; -khtml-border-radius:2px; border-radius:2px; background:#fff; color:#333; font:normal 12px/22px Arial, Helvetica, sans-serif; cursor:pointer;}
.page_nav strong{display:inline-block; height:24px; margin:0 3px; padding:0 8px; border:none; -moz-border-radius:2px; -webkit-border-radius:2px; -khtml-border-radius:2px; border-radius:2px; background:#C00; color:#fff; font-weight:normal; line-height:24px; text-decoration:none;}
.page_nav a:hover,
.page_nav a.on{height:24px; margin:0 3px; border:none; background:#C00; color:#fff; line-height:24px; text-decoration:none;}
.page_nav a.select{cursor:default;}
.page_nav .view_all{display:block; text-align:center;}
.page_nav .view_all a{height:auto; margin:0; padding:0; border:none; color:#06c; line-height:24px;}
.page_nav .view_all a:hover{height:auto; margin:0; padding:0; background:none;}

注意事项:

      必须配置nhibernate如下:有些是.MsSql2000Dialect 在使用分页的方法时是会报错的。

            <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>

原文地址:https://www.cnblogs.com/zhengwei-cq/p/14237005.html