zoukankan      html  css  js  c++  java
  • ASP.NET MVC 数据分页

    作为一个菜鸟级的程序猿,总结一下学到的两种数据分页。

    1.真分页

    真分页就是需要时从数据库里读出需要多的数据,利用存储过程可实现。网上的分页SQL特别多,数据库自带的一些方法也可方便的帮助分页,但是我还是比较喜欢一大神教给我的“虚表分页法”。

    (此例用新闻表为例,pageIndex从0开始计)

    (1)创建虚表,含两个字段(ID:自身编号;VID:用来存储新闻表的ID)

    create table #V_Table ( ID int identity(1,1), VID int )

    (2)将新闻表ID的插入虚表的VID列

    insert into #V_Table(VID) select NewsID from News_Table order by NewsID desc

    (3)因为虚表的ID是连续的,一次可方便的查找出需要条数的数据

    select T1.* from News_Table T1,#V_Table T2 where T1.NewsID=T2.VID and T2.ID between @PageIndex*@PageSize+1 and (@PageIndex+1)*@PageSize

    2.假分页

    假分页就是一次将所有数据从数据库读出来,然后显示的时候分页。最近做一个小项目就用到了分页,就顺便用了此方法。

    http://www.cr173.com/html/15481_1.html

    因为项目使用的是MVC,所以需要几个地方的代码的实现,此例使用Student类作为数据源模拟。

    (1)Models文件夹下,添加PagingHelper.cs文件

    public class PagingHelper<T>
        {
            //分页数据源
            public IEnumerable<T> DataSource { get; private set; }
            //每页显示记录的数量
            public int PageSize { get; private set; }
            //当前页数
            public int PageIndex { get; set; }
            //分页总页数
            public int PageCount { get; private set; }
            //是否有前一页
            public bool HasPrev { get { return PageIndex > 1; } }
            //是否有下一页
            public bool HasNext { get { return PageIndex < PageCount; } }
            //构造函数
            public PagingHelper(int pageSize, IEnumerable<T> dataSource)
            {
                this.PageSize = pageSize > 1 ? pageSize : 1;
                this.DataSource = dataSource;
                PageCount = (int)Math.Ceiling(dataSource.Count() / (double)pageSize);
            }
            //获取当前页数据
            public IEnumerable<T> GetPagingData()
            {
                return DataSource.Skip((PageIndex - 1) * PageSize).Take(PageSize);
            }
        }

    (2)控制器

    public class HomeController : Controller
        {
            public ActionResult Index(int pageIndex=1)
            {
                PagingHelper<Student> StudentPaging = new PagingHelper<Student>(2, Students.data);//初始化分页器
                StudentPaging.PageIndex = pageIndex;//指定当前页
                return View(StudentPaging);//返回分页器实例到视图
            }
        }

    (3)视图

    @using JohnConnor.Web.Models
    @model PagingHelper<Student>
    @{
        ViewBag.Title = "Index";
    }
    <h2>Index</h2>
    @foreach (var Data in Model.GetPagingData())
    {
        <p>ID:@Data.Id Name:@Data.Name</p>
    }
    <p>
    @if (Model.HasPrev)
    {
        <a href="@Url.Action("Index", "Home", new { pageIndex = Model.PageIndex - 1 })">上一页</a>
    }
    else
    {
        <em style="color:Gray">上一页</em>
    }
    @if (Model.HasNext)
    {
        <a href="@Url.Action("Index", "Home", new { pageIndex = Model.PageIndex + 1 })">下一页</a>
    }
    else
    {
          <em style="color:Gray">下一页</em>
    }
    </p>

    (4)路由表配置

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                routes.MapRoute(
                    "Default", // 路由名称
                    "{controller}/{action}/{pageIndex}", // 带有参数的 URL
                    new { controller = "Home", action = "Index", pageIndex = UrlParameter.Optional } // 参数默认值
                );
            }

    3.写在最后的话

    其实,这篇博文不算原创,但是作为一个菜鸟,“拿来主义”是也可取的,最重要的是理解了,最最重要的是学习到其中的思想。

    希望对刚入门的小弟弟们有帮助,也希望大牛们不吝赐教。

  • 相关阅读:
    Postman+Newman+jenkins实现API自动化测试
    抓包,反抓包,反反抓包
    使用Magisk+riru实现全局改机
    stat命令的实现-mysate(必做)
    第五章学习笔记
    第四章学习笔记
    2.3.1测试
    缓冲区溢出
    学习笔记6
    电子公文传输系统团队项目——需求规格说明书
  • 原文地址:https://www.cnblogs.com/talentzemin/p/3538905.html
Copyright © 2011-2022 走看看