封装MVC的分页方法

一年半没有做过MVC的项目了,还是很怀念(因为现在项目还是原来的ASPX),个人还是喜欢mvc,最近又开始重拾MVC,感觉既熟悉又陌生。

记录一下封装好的分页代码

       public static List<T> SelectPageList<T>(DbSet<T> source, string sqlstr, int pageIndex, int pagesize, string orderByField, ref int totalCount) where T : class
       {
           SqlParameter[] spm = new SqlParameter[5];
           spm[0] = new SqlParameter("@Sql", sqlstr);
           spm[1] = new SqlParameter("@PageIndex", pageIndex);
           spm[2] = new SqlParameter("@PageSize", pagesize);
           spm[3] = new SqlParameter("@OrderByField", orderByField);
           spm[4] = new SqlParameter("@TotalRecord", totalCount);
           spm[4].Direction = ParameterDirection.Output;
           var data = source.SqlQuery("exec Pro_PageProcedure @Sql,@PageIndex,@PageSize,@OrderByField,@TotalRecord out", spm).ToList();
           totalCount = Convert.ToInt32(spm[4].Value.ToString());
           return data;
       }

因为直接用linq的分页方式感觉效率还是不是很高,所以改用存储过程,上面方法用泛型的方式,可以灵活的调用。存储过程网上很多,也可以自己写一个,以下是我用的存储过程

CREATE PROCEDURE [dbo].[Pro_PageProcedure]
 @Sql nvarchar(max),        --表名
 @PageIndex int = 1 ,            --指定当前为第几页
 @PageSize int,                    --每页多少条记录
 @OrderByField nvarchar(1000),        --row_number需要的排序字段
 @TotalRecord int output           --返回总页数
as
    Declare @_sql nvarchar(max);    

    --计算总记录数

    set @_sql = ‘select @TotalRecord = count(*) from (‘ + @Sql + ‘) a‘

   EXEC sp_executesql @_sql,N‘@TotalRecord int OUTPUT‘,@TotalRecord OUTPUT--计算总记录数        

    Declare @StartRecord int
    Declare @EndRecord int

    set @StartRecord = (@pageIndex-1)*@PageSize + 1
    set @EndRecord = @StartRecord + @pageSize - 1

   set @_sql =‘select * from ( select ROW_NUMBER() Over(‘ + @OrderByField + ‘) as _ttRowId,* from (‘ +  @Sql + ‘) _tt0 ) _tt1 ‘
   set @_sql = @_sql + ‘where _ttRowId between ‘ + CAST(@StartRecord as nvarchar) + ‘ and ‘ + CAST(@EndRecord as nvarchar)

    Exec(@_sql)

上面方法写在基类,各个子类继承基类都可以直接调用此方法进行分页查询,以下是其中一个子类调用

        /// <summary>
        /// 获取分页列表
        /// </summary>
        /// <returns></returns>
        public List<FixedAnswer> GetPageList(int pageIndex, int pageSize, ref int totalCount)
        {
            string strSql = "select * from FixedAnswer";
            string orderfied = "order by id desc";
            return SelectPageList<FixedAnswer>(db.FixedAnswer, strSql, pageIndex, pageSize, orderfied, ref totalCount);
        }
时间: 2024-10-26 12:53:45

封装MVC的分页方法的相关文章

封装EF code first用存储过程的分页方法

一年半没有做过MVC的项目了,还是很怀念(因为现在项目还是原来的ASPX),个人还是喜欢mvc,最近又开始重拾MVC,感觉既熟悉又陌生. 记录一下封装好的分页代码 首先先说下 我使用EF codefirst的目的. 是因为可以有更纯净的代码 不再有EDMX这些东西  而不是真正的用 code first 先有代码 再生成数据库.所以 我虽然使用 的是codefirst 但是本质依然是数据库优先.这个大家可以网上找资料 在基类中写好方法 public class BaseService { pub

MVC快速分页

.NET手记-ASP.NET MVC快速分页的实现 对于Web应用,展示List是很常见的需求,随之而来的常见的分页组件.jQuery有现成的分页组件,网上也有着大量的第三方分页组件,都能够快速实现分页功能.但是今天我描述的是用基本的C#和html代码实现的分页,不借助任何第三方组件. 实现思路 这里的实现主要借助ViewModel和HtmlHelper实现,通过传递分页参数PagingInfo来实现. 创建分页参数类PagingInfo.cs using System; namespace C

C# 分页方法

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web; namespace System.Web.Mvc //注意修改为与HtmlHelper相同的命名空间{ /// <summary> /// 静态 分页方法 /// </summary> public static class MyHtmlHelper { //HtmlHelper的扩展

mybatis常用经典分页方法

来自棱镜学院-在线IT教育www.prismcollege.com 分页方法一: 可以查看如下代码,新建一个数据库分页基础类 package com.ssm.utils.pagination.pagebounds; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spr

MVC中分页的实现

我在格斗人网 (www.helpqy.com) 中使用了下面的分页技术. 分页可以采用troygoode提供的开源包,其开源网站主页为:https://github.com/TroyGoode/PagedList.具体使用方法如下所示: 1. 通过NuGet下载PagedList.Mvc包,这个包会自动下载另外一个包PagedList,如下所示: 2. 在controller中引入以上两个包,如下所示: 3. 在controller中的ActionResult函数中按照如下最小结构进行调用: 1

mybatis Spring MVC添加分页拦截器

网上有很多封装的mybatis 分页拦截器,但是看起来都比较乱,不能直接套用,在这里贴出项目中的分页源码出来供大家参考. Controller 层: @RequestMapping("/channelList") public String channelList(HttpServletRequest request,AppMarket appMarket,Model model){ String pageNo = request.getParameter("pageNo&q

Mvc Linq 分页 参考PagedList

第一次写博客 写的不好各位大神多多包涵. 我的分页主要是针对Linq 分页来写的,针对IEnumerable<T>  和 IQueryable<T> 类型数据分页. 开始上代码 创建接口: public interface IPagedList { /// <summary> /// 总记录数 /// </summary> int TotalCount { get; set; } /// <summary> /// 总页数 /// </su

详解ASP.NET MVC数据分页

ASP.NET MVC框架已经进入2.0时代,本文将从ASP.NET MVC数据分页谈起,希望能对大家有所帮助. 在网页上进行表格资料或其他显示资料的分页是一种十分常见的需求,以前我们有 GridView 或 DataPager 可以帮我们自动分页,虽然到了 ASP.NET MVC 一切全部重头来过,但我们也不用真的那麽辛苦的自己实做分页,因为早就有人帮我们写好程式并开放原始码分享给这个世界了. 如果你已经体会到在 ASP.NET MVC 中妥善利用强型别(Strong Typed)特性进行开发

Mvc自定义分页控件

MVC开发分页常常使用第三方控件,生成的分页HTML带有版权申明,虽然免费,但是总有的别扭.于是,某日,楼主闲来蛋疼,折腾了个自定义分页控件: 先来展示下效果图: 1>当分页不超过10页的时候,完全显示出来: 2>当分页超过10页,效果图如下所示: 再来看看生成的分页代码,竟然和楼主一样纯洁!!! 3>支持自定义路由.参数.页码html格式.首末页是否显示.上下页是否显示.URL分页参数传递功能. 使用方法: 1.引用 YYP.PagerHtml.dll 2.页面使用 @using YY