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();
                });
            });
        })

 

完。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章