分布视图分页

//数据库中新建存储过程: 1 USE [SAAS0626]
 2 GO
 3 /****** Object:  StoredProcedure [dbo].[Paging]    Script Date: 2017/8/7 11:03:32 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 ALTER PROCEDURE [dbo].[Paging]
 9 (  @TableName VARCHAR(1000),       --表名,多表时使用 tA a inner join tB b On a.AID = b.AID
10    @Fields NVARCHAR(2000) = ‘*‘,   --读取字段
11    @Condition NVARCHAR(3000) = ‘‘, --Where条件
12    @Sort NVARCHAR(200) = ‘‘,       --排序字段,不能为空
13    @CurrentPage INT = 1,           --开始页码
14    @PageSize INT = 10,             --页大小
15    @GroupBy varchar(200),          --分组语句
16    @RecordCount INT = 0 OUT
17 )
18 AS
19
20 DECLARE @strWhere VARCHAR(2000)
21 DECLARE @strGroup VARCHAR(200)
22 DECLARE @strsql NVARCHAR(3900)
23
24 IF @Condition IS NOT NULL AND len(ltrim(rtrim(@Condition)))>0
25   BEGIN
26    SET @strWhere = ‘ WHERE ‘ + @Condition + ‘ ‘
27   END
28 ELSE
29   BEGIN
30    SET @strWhere = ‘‘
31   END
32
33 IF @GroupBy IS NOT NULL AND len(ltrim(rtrim(@GroupBy)))>0
34   BEGIN
35    SET @strsql = ‘SELECT @RecordCount = Count(1) FROM (SELECT 1 AS total FROM ‘ + @TableName + @strWhere + ‘ group by ‘ + @GroupBy + ‘) as t‘
36    SET @strGroup = ‘ GROUP BY ‘ + @GroupBy + ‘ ‘
37   END
38 ELSE
39   BEGIN
40    SET @strsql = ‘SELECT @RecordCount = Count(1) FROM ‘ + @TableName + @strWhere
41    SET @strGroup = ‘‘
42   END
43
44
45 EXECUTE sp_executesql @strsql, N‘@RecordCount INT output‘, @RecordCount OUTPUT
46
47 IF @CurrentPage = 1 --第一页提高性能
48 BEGIN
49   SET @strsql = ‘SELECT TOP ‘ + str(@PageSize) + ‘ ‘ + @Fields + ‘ FROM ‘ + @TableName + ‘ ‘ + @strWhere + @strGroup + ‘ ORDER BY  ‘+ @Sort
50 END
51 ELSE
52   BEGIN
53     DECLARE @startRecord NVARCHAR(50)
54     DECLARE @endRecord NVARCHAR(50)
55     SET @startRecord = CONVERT(NVARCHAR(50),(@CurrentPage - 1) * @PageSize + 1)
56     SET @endRecord = CONVERT(NVARCHAR(50),@CurrentPage * @PageSize)
57     SET @strsql = ‘SELECT * FROM (
58         SELECT ‘+ @Fields + ‘,ROW_NUMBER() OVER(ORDER BY ‘ + @Sort + ‘) AS rownum FROM ‘+ @TableName + @strWhere + @strGroup + ‘) AS XX
59         WHERE rownum BETWEEN ‘+ @startRecord + ‘ AND ‘ + @endRecord
60   END
61 EXEC(@strsql)
62 RETURN

建立Model:

public class PageData<T>
    {
        public PageData()
        {
            this._Items = new List<T>();
        }

        private IList<T> _Items;
        public IList<T> Items
        {
            get { return _Items; }
            set { _Items = value; }
        }

        public int RecordCount { get; set; }
        public int CurrentPage { get; set; }
        public int PageCount { get; set; }
    }

public class PageParams
    {
        /// <summary>
        /// 表名(多表使用tA a inner join tB b On a.AID = b.AID)
        /// </summary>
        public string TableName { get; set; }

        private string _Fileds = "*";
        /// <summary>
        /// 查询字段
        /// </summary>
        public string Fields
        {
            get { return _Fileds; }
            set { _Fileds = value; }
        }

        private string _Sort = "ID";
        /// <summary>
        /// 排序字段(不能为空)
        /// </summary>
        public string Sort
        {
            get { return _Sort; }
            set { _Sort = value; }
        }

        /// <summary>
        /// 查询条件
        /// </summary>
        public string Condition { get; set; }

        private int _CurrentPage = 1;
        /// <summary>
        /// 当前页数(从1开始)
        /// </summary>
        public int CurrentPage
        {
            get { return _CurrentPage; }
            set { _CurrentPage = value; }
        }

        private int _PageSize = 10;
        /// <summary>
        /// 每页条数
        /// </summary>
        public int PageSize
        {
            get { return _PageSize; }
            set { _PageSize = value; }
        }

        public string GroupBy { get; set; }

        /// <summary>
        /// 总记录数
        /// </summary>
        public int RecordCount  { get; set; }

    }

Js代码(jquery.pagination.min.js):

1 (function(b){var a={init:function(d,c){return(function(){a.fillHtml(d,c);if(d[0]&&!b._data(d[0],"events")){a.bindEvent(d,c)}})()},fillHtml:function(d,c){return(function(){var l=c.current,h=c.pageCount,f=[],m,g,e=10;if(isNaN(h)){d.html("");return}if(l<=1){m=1;g=e;if(g>h){g=h}}else{if(l>=h){m=h-e+1;g=h;if(m<=0){m=1}}else{var k=Math.ceil(e/2);m=l-k;if(m<=0){m=1}g=m+e-1;if(g>h){g=h}if(m>h){g=h}}}if(l>1){f.push(‘<li><a href="javascript:;" class="first">首页</a></li>‘);f.push(‘<li><a href="javascript:;" class="prev">上一页</a></li>‘)}else{f.push(‘<li class="disabled"><span>首页</span></li>‘);f.push(‘<li class="disabled"><span>上一页</span></li>‘)}for(var j=m;j<=g;j++){if(j==l){f.push(‘<li class="disabled"><span class="current">‘+j+"</span></li>")}else{f.push(‘<li><a href="javascript:;" class="number">‘+j+"</a></li>")}}if(l<h){f.push(‘<li><a href="javascript:;" class="next">下一页</a></li>‘);f.push(‘<li><a href="javascript:;" class="last">末页</a></li>‘)}else{f.push(‘<li class="disabled"><span>下一页</span></li>‘);f.push(‘<li class="disabled"><span>末页</span></li>‘)}d.html(f.join(""))})()},bindEvent:function(d,c){return(function(){d.on("click","a",function(){var e;switch(this.className){case"first":e=1;break;case"prev":var f=parseInt(d.find("span.current").text(),10);e=f-1;break;case"number":e=parseInt(this.innerText);break;case"next":var f=parseInt(d.find("span.current").text(),10);e=f+1;break;case"last":e=c.pageCount;break}typeof c.callback=="function"&&c.callback(e)})})()}};b.fn.Paging=function(d){var e={current:1,pageCount:1,pageSize:10,callback:function(){}};var c=b.extend({},e,d);a.init(this,c)}})(jQuery);

View视图中添加分页样式:

 1 <div class="text-left">
 2             <div class="pagesize">
 3                 每页
 4                 <select id="positions-pagesize">
 5                     <option value="10">10</option>
 6                     <option value="30">30</option>
 7                     <option value="50">50</option>
 8                 </select>
 9                 条 &nbsp;&nbsp;&nbsp;&nbsp;共&nbsp;&nbsp; <span id="pCount"></span> &nbsp;&nbsp;页 &nbsp;&nbsp; &nbsp;&nbsp; 共 &nbsp;&nbsp;<span id="rCount"></span> &nbsp;&nbsp;条记录&nbsp;&nbsp;&nbsp;&nbsp;
10             </div>
11             <ul class="pagination" id="positionPager">
12                 <li class="disabled"><span>上一页</span></li>
13                 <li class="disabled"><span class="current">1</span></li>
14                 <li class="disabled"><span>下一页</span></li>
15             </ul>
16         </div>需要引用JS<script src="~/JS/Common/jquery.pagination.min.js"></script>

分布视图中需要添加隐藏button存储参数:

1 <input id="pageCount" type="hidden" value="@(Model != null ? Model.PageCount : 0)" />
2 <input id="reCount" type="hidden" value="@(Model != null? Model.RecordCount : 0)" />

Js代码:

 1 //页码显示条数触发事件
 2 $("#positions-pagesize").on("change", function () { LoadOrderReply(1, this.value); })
 3
 4 //首页刷新
 5 LoadOrderReply();
 6 function LoadOrderReply(page, size) {
 7     size = $("#positions-pagesize").val();
 8     $("#orderTb").load("/OrderReply/OrderReplyPartial", { "page": page || 1, "size": size || 10 }, function () {
 9         //显示第几页,共几条记录
10         if ($("#pageCount").val() != 0) {
11             $("#pCount").text($("#pageCount").val());
12             $("#rCount").text($("#reCount").val());
13         }
14         else {
15             $("#pCount").text(0);
16             $("#rCount").text(0);
17         }
18
19         //触发鼠标停留显示
20         $("[data-toggle=‘popover‘]").popover({ html: true });
21         $("[data-toggle=‘popover‘]").popover();
22         $("#positionPager").Paging({
23             current: page,
24             pageCount: parseInt($("#pageCount").val(), 10),
25             callback: function (p) { LoadOrderReply(p, size); }
26         });
27     });
28 }
时间: 2024-08-08 15:33:17

分布视图分页的相关文章

MVC-Razor分布视图

什么是分布视图? Mvc时代的分部视图,web form时代的对应物ascx分部控件.当然MVC对分布视图具有更强的控制能力. 分布视图的优点? 1.分布视图可以使系统插件化(各个功能模块都是独立的,减少开发,增加重用). 2.分工合作(适应群体开发). 3.实现简单. 分布视图的实现? 原理:我们都知道MVC是通过Action方法对应到view中的,Action方法可以通过ParticalView方法以PartialViewResult方式返回分布视图. 一般用在Ajax请求部分代码. 具体D

nodejs partials 分布视图

在学习<node.js开发指南>nodejs partials view时,怎么都不能运行成功.经过艰苦探索,终于成功了,分享一下. Cause: nodejs 的express 版本之间不是很兼容,各个版本差异很大,一般用npm 默认安装的都是最新版本的express. Solution:partials() 如果要直接在ejs的view视图中使用需要加载 express-partials模块:require('express-partials') . 1.在app.js 中引用expres

【兼容写法】HttpServerUtility.Execute 在等待异步操作完成时被阻止。关键词:MVC,分布视图,异步

异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html MVC6之前的版本,对分部视图的异步支持不是很好 问题: 视图里面有分布视图:@{Html.RenderAction("NewProduct", "PartialView", new { count = 10 });} 后端采用异步方法,比如: 其实MVC里面的分布视图有两种调用方法,大多人都是喜欢用第一种,@{Html.RenderAction(&

MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component. 可以认为view component是partial view的替代品. 我认为view component是 .net core中非常重要的一个功能,除了跟partial view类似的特征外,view component比较方便带参数和业务逻辑,一般通过layout page调用. 一些典型的应用场景如动态导航菜单,登录框,购物车等

MVC系列学习(八)-分布视图

1.本次学习实例 1.1.建议:为了尽可能让项目简单,就新建一个空的mvc项目,同时添加任何视图不用模板页 1.2注意:在添加LoginPart的分部视图时,要记得沟一个沟 2.项目代码,如下 总共三个文件,一个控制器HomeController.cs 一个展示视图Index.cshtml 一个分部视图LoginPart.cshtml 3.从 视图中 请求 另一视图 2.在视图中 请求 控制器 结论:在Action与Action之间传数据,可以用TempData

MVC添加分布视图做唯一验证

Model里的代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MvcApplication5.Models { public class zhuceBF { private MyDBDataContext _context = new MyDBDataContext(); //定义一个Bool类型的查询方法 public bool Select(st

Mvc分页组件MvcSimplePager代码重构

1 Mvc分页组件MvcSimplePager代码重构 1.1 Intro 1.2 MvcSimplePager 代码优化 1.3 MvcSimplePager 使用 1.4 End Mvc分页组件MvcSimplePager代码重构 Intro MvcSimplePager 是为解决分页的而做的一个通用.扩展性良好的轻量级分页扩展,可以自定义分页时调用的方法,自定义分页所用的样式,样式与代码分离,维护方便. 网上有许多分页都是查询所有数据再从中查询某一页的数据,但是个人感觉数据很少时还可以,如

MVC简易分页(Razor)

一.无数据提交    第一步,建立一个 Controller命名为PageIndex的空控制器,自定义一个方法如下:           public ActionResult PageIndex(string action, string controller, int currentPage, int pageCount)        {            //int count = db.Product.Count();            ViewBag.PageCount =

Asp.net MVC3表格共用分页功能

在建立的mvc3项目中,在Razor(CSHTML)视图引擎下,数据会在表格中自动的生成,但分页没有好的控件实现,这里我们开发了设计了一个分页的模板,适合于没有数据提交和有数据提交的分页的分页. 第一:没有有数据提交的分页功能: 第一步,建立一个 Controller命名为PageIndex的空控制器,自定义一个方法如下: public ActionResult PageIndex(string action, string controller, int currentPage, int pa