MVC——分页控件

不管是什么类型的网站,分页都是必不可少的功能实现。在这里记录一下我自己接触过的分页控件:

一. MvcPager控件(记得项目里添加MvcPager.dll的引用)

这里面比较常用的就

——@Html.Page()

这里面有很多参数,具体的不一一细说,

,常用的格式是 @Html.Page(数据源,参数设置),例如:

@Html.Pager(Model, new PagerOptions
 {
     PageIndexParameterName = "pageIndex",
     ShowPageIndexBox = true,
     FirstPageText = "首页",
     PrevPageText = "上一页",
     NextPageText = "下一页",
     LastPageText = "末页"
   ……

 })
注意这里的数据源是IPagedList pagedList类型。

同时mvc页面记得添加一个model及引用:

@model PagedList<User> 

@using Webdiyer.WebControls.Mvc;

 

Controller里面一般就是根据前台分页控件传回来的pageIndex来提取相应数据:

public ActionResult Index(int pageIndex=1,int pageSize=10)
        {
            var pagedList = _Services.GetPagedList(pageIndex,pageSize );
          

            return View(pagedList );
        }

对应的services层里获取数据:

public PagedList<Entity> GetPagedList( int p = 1, int s = 10)
        {
            var query = _db.Table;

            query = query.Where(t => t.State == (int)CommonState.正常);

            query = query.OrderByDescending(t => 1==1);

            return query.ToPagedList(p, s);
        }


完。

 

但是这种分页是刷新页面重新提取一下数据填充页面,对于用户体验来说不好。并且,在某些情况下满足不了需求。

比如说:当你需要根据用户输入的内容来作为你提取数据的条件时,上面的分页方式就不满足了。

在这里,推荐一个自己常用的js分页控件:

二、jquery.pagination.js分页

因为这是用jq去异步去请求数据,所以可以达到“无刷新”的效果,并且可以附带一些参数条件去请求。

使用时首先引用 jquery.pagination.js (分页js),跟pagination.css(分页样式css)。具体的网上一搜一大把。

前台关键js代码(用的seajs):

define(function (require, exports, module) {
    var $ = require('$'),
        global = require('global'), loading = require("loading");
    require('tmpl'); require("pagination");
    function App(options) {
        /// <summary>
        /// App 构造函数
        /// </summary>

        //默认配置
        var config = {
            getDataUrl: '',//获取数据地址
            uiList: '',//前台填充母体
            uiTemp: '',//前台填充模板
            uiMsgTemp: '',//前台填充模板
            uiPagination: ''//前台分页控件id 或class
        };

        if (options) {
            //合并配置
            config = $.extend(true, config, options);
        }

        this.config = config;

    }

    App.prototype.initData = function (index, size, callback) {
        var self = this;
        loading.show();
        $.ajax({
            type: "POST",
            url: self.config.getDataUrl,
            data: {
                p: index,
                s: size
            },
            success: function (result) {
                $(self.config.uiList).empty();
                if (result.counts == 0) {
                    if (self.config.uiMsgTemp != '')
                        $(self.config.uiMsgTemp).tmpl().appendTo(self.config.uiList);
                }
                else {
                    $(self.config.uiTemp).tmpl(result.data).appendTo(self.config.uiList);
                    callback && callback();
                    self.GetData(index, size, result.counts, callback);
                }

                if ($('#j-pageTite').length > 0)
                    $('#j-pageTite').html(result.counts);

            },
            error: function () {
                loading.msg("系统错误");
            }
        });

        loading.hide();
    }

    App.prototype.GetData = function (PageIndex, PageSize, ItemCounts, callback) {
        var self = this;
        //加入分页的绑定 
        $(self.config.uiPagination).pagination(ItemCounts,
            {
                callback: function (i) {
                    self.initData(i + 1, PageSize, callback);
                },
                prev_text: '上一页',       //上一页按钮里text  
                next_text: '下一页',       //下一页按钮里text  
                is_callback_on_init: false,
                items_per_page: PageSize,  //显示条数  
                num_display_entries: 10,    //连续分页主体部分分页条目数  
                current_page: PageIndex - 1,   //当前页索引  
                num_edge_entries: 2       //两侧首尾分页条目数  
            });
    }


    module.exports = App;

});

最后调用

$(function () {
            require.async(['../../api/api'], function (api) {
                var _api = new api({
                    getDataUrl: '/AsynFllower/GetUserCollectItem',
                    uiList: '#j-style-list',
                    uiTemp: '#j-style-tmpl',
                    uiMsgTemp: '#j-msg-tmpl',
                    uiPagination: '.j-pagination'
                });
                _api.initData(1, 10, function () {
                    self.Cancel();
                });
            });
        })

 

完。

 

posted @ 2014-03-21 15:39  Dieaz5  阅读(1678)  评论(5编辑  收藏  举报