asp.netMVC中实现分页方法

方法一:使用传统的sql语句实现分页,    public class UserprintDao如下

/// <summary>
        /// 取得用户申请记录列表(按分页)
        /// </summary>
        /// <param name="userid"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <returns></returns>
        public List<Userprint> GetUserReportListByUserId(Userprint userprint)
        {
            string sql =
                "select * from (select row_number() over(order by id desc) as num,* from userprint where [email protected] ";
            if (!string.IsNullOrEmpty(userprint.Printname))
            {
                sql += " and printname like @printname";
            }
            sql += ") as t where t.num>[email protected] and t.num<[email protected]";
            return DoUserprintList(sql, userprint);
        }

//统一函数返回打印列表
        public List<Userprint> DoUserprintList(string sql, Userprint userprint)
        {
            try
            {
                using (SqlConnection conn = SqlHelper.GetConn())
                {
                    return conn.Query<Userprint>(sql, userprint).ToList<Userprint>();
                }
            }
            catch (Exception)
            {
                return null;
            }
        }
        //统一函数返回记录总数
        public int DoRecordCount(string sql,Userprint userprint)
        {
            try
            {
                using (SqlConnection conn = SqlHelper.GetConn())
                {
                    return conn.ExecuteScalar(sql, userprint).ToString().ToInt32();
                }
            }
            catch (Exception)
            {
                return 0;
            }
        }/// <summary>        /// 取用户申请记录列表总数        /// </summary>        /// <param name="userprint"></param>        /// <returns></returns>        public int GetUserReportRecordCount(Userprint userprint)        {            string sql = "select count(1) from userprint where [email protected]";            SqlParameter[] para;            if (!string.IsNullOrEmpty(userprint.Printname))            {                sql += " and printname like @printname";            }            return DoRecordCount(sql, userprint);        }

控制器中如下

 public ActionResult ReprotManage()
        {
             Userprint tempuserprint = new Userprint();
            var keys = Request["keys"];
            if (!string.IsNullOrEmpty(keys))
            {
                tempuserprint.Printname = "%"+keys+"%";
            }

            tempuserprint.Userid = getUserBySession().Id;
            int pageIndex = Request["pageIndex"] == null ? 1 : Request["pageIndex"].ToInt32();

            int pageCount = GetPageCount(tempuserprint, pageSize, printdao.GetUserReportRecordCount);

            int start = (pageIndex - 1) * pageSize + 1;
            int end = pageIndex * pageSize;
            tempuserprint.start = start;
            tempuserprint.end = end;

            ViewData.Model = printdao.GetUserReportListByUserId(tempuserprint);
            ViewBag.pageIndex = pageIndex;
            ViewBag.pageCount = pageCount;
            return View();
        }
        //计算分页总数,使用委托合成一个函数
        public int GetPageCount(Userprint userprint, int pageSize, Func<Userprint, int> GetRecordCount)
        {
            return Math.Ceiling((double)GetRecordCount(userprint) / pageSize).ToString().ToInt32();
        }

在view视图添加分页代码,代码如下:

 <div class="text-center">@Html.Raw(Print.PageBar.GetPageBarToUlLi(ViewBag.pageIndex, ViewBag.pageCount))</div>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Print
{
    public class PageBar
    {
        public static string GetPageBarToUlLi(int pageIndex, int pageCount)
        {
            if (pageCount <= 1)
            {
                return string.Empty;
            }
            int start = pageIndex - 5;
            start = start < 1 ? 1 : start;
            int end = start + 9;
            end = end > pageCount ? pageCount : end;
            StringBuilder sb = new StringBuilder();
            sb.Append("<nav><ul class=‘pagination‘><li");
            if (pageIndex == 1)
                sb.Append(" class=‘disabled‘");
            sb.Append("><a href=‘?pageIndex=1‘ aria-label=‘Previous‘><span aria-hidden=‘true‘>").Append("第一页").Append("</span></a></li>");

            for (int i = start; i <= end; i++)
            {
                if (i == pageIndex)
                    sb.Append("<li class=‘active‘><a href=javascript:void(0)>" + i + "</a></li>");
                else
                {
                    sb.Append(string.Format("<li><a href=?pageIndex={0}>{0}</a></li>", i));
                }
            }
            sb.Append("<li");
            if (pageIndex == pageCount)
                sb.Append(" class=‘disabled‘");
            sb.Append("><a href=‘?pageIndex=").Append(pageCount).Append("‘ aria-label=‘Next‘> <span aria-hidden=‘true‘>最后一页</span></a></li></ul></nav>");
            return sb.ToString();
        }
        public static string GetPageBar(int pageIndex, int pageCount)
        {
            if (pageCount <= 1)
            {
                return string.Empty;
            }
            int start = pageIndex - 5;
            start = start < 1 ? 1 : start;
            int end = start + 9;
            end = end > pageCount ? pageCount : end;
            StringBuilder sb = new StringBuilder();
            sb.Append("<a href=?pageIndex=1>第一页</a>");
            for (int i = start; i <= end; i++)
            {
                if (i == pageIndex)
                    sb.Append(" " + i + " ");
                else
                {
                    sb.Append(string.Format("<a href=?pageIndex={0}>{0}</a>", i));
                }
            }
            sb.Append(string.Format("<a href=?pageIndex={0}>最后一页</a>", pageCount));
            return sb.ToString();
        }
    }
}

写的有点乱,这是从项目中复制出来的,其中使用到了ORM框架Dapper, js库jquery,UI美化:bootstrip,自行添加。

效果图如下:

方法二:使用第三方库PageList,添加引用 ,使用NuGet添加:PagedList,同时也会添加PagedList.Mvc

在控制器中实现如下代码:

  public ActionResult Index(SearchInfo info, int page = 1){

   var result=(from p in db.userprints select p).OrderByDescending(m => m.addtime).ToPagedList(page, 17);
   if (Request.IsAjaxRequest())           return PartialView("_statislist", statis);
   return View(result);

}

在主视图中代码:

<div class="col-md-10">
            @Html.Partial("_statislist", Model)
        </div>

部分视图_statislist.cshtml代码如下:

@using PagedList.Mvc
@model IPagedList<Print.Entity.userprint>

<div id="statislist">
    <div class="pagedList" >
        @Html.PagedListPager(Model,page=>Url.Action("Index",new{page}),PagedListRenderOptions.Classic)
    </div>
    <table class="table table-hover table-striped">
        <tr>
            <th>
                文印名称
            </th>
            <th>
                打印色彩
            </th>
            <th>
                单双面
            </th>

            <th>
                纸张大小
            </th>

        </tr>

        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.printname)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.printcolor)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.printmode)
                </td>

                <td>
                    @Html.DisplayFor(modelItem => item.printpagersize)
                </td>

            </tr>
        }
    </table>
</div>

为分页添加样式,此代码放在主视图就行

<script>
    $(function () {

        $(".pagedList a").click(function () {
            $.ajax({
                url: $(this).attr("href"),
                data: $("form").serialize(),
                type: "get"
            }).down(function (data) {
                $("#statislist").replaceWith(data);
            });
        });
    });
</script>

效果如下:

时间: 2024-07-29 14:35:36

asp.netMVC中实现分页方法的相关文章

ASP.NET中Server.MapPath方法获取网站根目录

在ASP.NET网站应用程序中,可以通过Server.MapPath方法来获取跟服务器有关的目录信息,如获取网站的根目录.获取当前代码文件所在的目录路径.获取当前代码所在路径的上级路径等.Server.MapPath获得的路径都是服务器上的物理路径,也就是常说的绝对路径,如D:\website\content这种形式.以下是一些Server.MapPath常用的获取网站目录的方法.(1)Server.MapPath("/") :获取网站的根目录(2)Server.MapPath(&qu

这两天自己模仿写的一个Asp.Net的显示分页方法 附加实体转换和存储过程

之前自己一直用Aspnetpager控件来显示项目中的分页,但是每次都要拖一个aspnetpager的控件进去,感觉很不舒服,因为现在自己写的webform都不用服务器控件了,所以自己仿照aspnetpager写了一个精简实用的返回分页显示的html方法,其他话不说了,直接上代码. 分页显示信息的实体类:  public class Pager    {        private string _firstPageText;        /// <summary>        ///

asp.netMVC中使用aop进行关注点分离

资源地址:https://stackoverflow.com/questions/23244400/aspect-oriented-programming-in-asp-net-mvc 从页面复制过来的内容: 问题: 我目前正在ASP.NET中开发一个MVC应用程序,我正试图分离关注点,以便最终得到更清晰,更可维护的代码. 所以,作为一个起点,我正在考虑一个日志方面.我的想法是记录(最初)每个控制器中每个方法的调用和返回.我将这个逻辑放在一个专门用于记录的单独的类上,所以我不会在任何地方使用日志

asp.netMVC中的自动绑定模型测试小结

很久没有自己测试测试一些东西了,今天特意测试了一下MVC中自动绑定模型.本人也是小菜,希望能帮助到小小菜....嘿嘿 1.首先,创建一个MVC4的项目 2.创建一个Controller(控制器),有些小小菜肯定也知道Home是路由里默认的. 3.控制器都有了,默认会有个Index动作方法,我们只需要在拷贝一个接受Post请求的action即可 public ActionResult Index() { return View(); } [HttpPost] //视图中加的是实体类中的属性名对应

ASP.NET-MVC中Entity和Model之间的关系

Entity 与 Model之间的关系图 ViewModel类是MVC中与浏览器交互的,Entity是后台与数据库交互的,这两者可以在MVC中的model类中转换 MVC基础框架 来自为知笔记(Wiz) 附件列表 ASP.Net MVC基础框架.png viewmodel.JPG

关于百度编辑器UEditor在asp.net中的使用方法!

为了完成自己想要的功能效果,在项目中使用到了百度编辑器,为了搞明白,苦心学习查资料搞了整整一天,总结一下. 在asp.net 的项目中目前我觉得有两种情况,一种是没有使用模板页的,一种是使用了模板页的(我用的时候就是使用了模板页,我在网上查了很多,但是在模板页写的很少) 不废话了,开始步骤: 1.首先,下载编辑器,可以到百度官网上下载完整的,也可以自己定制需要的功能,再下载附上网址:http://ueditor.baidu.com/website/ 2.下载后解压,在你需要的项目中新建文件夹ue

asp.netMVC中配置automap

第一.新建类库,以解决方案名XXX为例,建立子类库名为  XXX.AutoMapper. 第二. XXX.AutoMapper类库中,添加对automap的引用. 第三.创建映射文件类 ModelProfile,继承Profile codes: --------------------------------------------- namespace BCMS.AutoMapper.Profiles{ public class ModelProfile : Profile { public

利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

原文:利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包 因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是64位也可能是32位,所以在打包的时候就需要打包成两份安装包.研究了几天终于有所收获,下边就是打包的步骤. 打包步骤: 一.前期准备 1.将asp.netmvc发布到本地目录中

asp.net 中使用 pagedlist 分页并具有查询功能的实现方法

用pagedlist在项目中做分页已N次了,今天再次用实例来实现一个带查询功能的分页例子. 1.在view代码: <div class="search"> <form method="post" action="/user/index"> <input placeholder="真实姓名" name="realname" /><button class="