MVCPager使用

一、背景

  用MVC来开发后台管理系统,主要是由于开发后台的时候,遇到列表分页时,对于初学者有时候会不知所措,网上的的mvc分页五花百门,而且文章都是不全面的,如果你不想花太多时间在这里,不妨用MVCpager,对于MVCPager网上也有很多文章介绍,都是不全面而且凌乱,本文将全面介绍,旨在统一一个MVCPager介绍文章,省去你看文档的麻烦(对初学者来说是不省时间的),但是MVCPager有人在维护,版本不断更新,基于此,本文章适用于想快速搭建MVC列表分页的开发者,有经验的开发者也可以参考下;

二、操作步骤

  1、网上有PageList,但本文只谈MVCPager,现在用得比较多的是2.0、3.0版本,用NuGet获取的话,目前是2.01版本,现在先来介绍2.01版本,先从NUGET获取,选择下面中文版本,上面的是1.0版本,本章主要讨论2.0版本,如图:

2、创建后台controller,控制器返回时判断是否是Ajax异步请求,因为列表请求都是异步请求,这里为免参数过长,添加了参数对象,参数过长往往会有数据泥团和数据重复的坏味道,这里需要注意因为MVCPager前端列表控件接受的是IPageList接口的对象,这里不能强制转换,你也可以新建一个实体实现Ipagelist接口来一个映射,将实体映射到你新建的类,但有点麻烦,这里供给那些不想太多时间的开发者,所以我这里封装了一个扩展方法泛型方法,避免代码重复,因为我这里已经封装了一个自己的pagelist<T>泛型集合,我也可以用PageList<T>实现IPageList接口,这里是应用接口的一个很好的例子,但为了省时间,做一个适配,你也可以使用你的List<T>集合,假如你没有封装自己的PageList,直接创建一个PagedList对象,只要赋值给CurrentPageIndex、TotalItemCount和PageSize即可,注意PagedList构造函数里面赋值indexPage=1,PageSize设置实际的页大小,如图:

扩展方法

3、页面创建Index视图,Index_Partial视图,这里需要添加引用jquery.unobtrusive-ajax.min.js,你可以通过NeGet控制台获得,命令是Install-Package Microsoft.jQuery.Unobtrusive.Ajax –version 3.0.0,并且在页面Index_Partial中using Webdiyer.WebControls.Mvc;

4、在Index视图中添加注册@{Html.RegisterMvcPagerScriptResource();},但如果页面多了也会有代码重复的坏味道,于是我就在Razor引擎扩展方法里面注册一下,再调用Partial,这时候在index_Partial,添加列表代码,添加插件方法,需要引用Using Webdiyer.WebControls.Mvc,在Index视图中用<div id=‘portlet-body’>包裹着,这里的id需要在MvcAjaxOptions选型中绑定,用于更新div,这个很重要,如果你有form,当你点击页面编号时需要带上条件,那么需要在DataFormID绑定form的id,这个时候就可以运行你的项目了;

5、另外关于参数对象,获取你还想了解一下,那么我这里的封装,给大家展现一下,在接收参数的时候,参数是http请求时认name的而这里封装的参数对象,在页面需要命名为Params.参数名,这里才能接收到,另外在Index_Partial的Ajax.Pager方法选项PageIndexParameterName=“indexpage”设置页数名字要和Query对象的一致,不然接收不到;

6、说了那么多没有一些代码复制好像也不爽,那么就将上面对应的代码贴出来;

using Bo.MiniCatchService;
using Bo.Model;
using Bo.Web.WorkRecordManage.Base;
using Bo.Web.WorkRecordManage.Models.UserModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Webdiyer.WebControls.Mvc;

namespace Bo.Web.WorkRecordManage.Controllers
{
    public class MvcPagerController : Controller
    {
         private readonly UserService _UserService;
        public MvcPagerController(UserService UserService)
        {
            this._UserService = UserService;
        }
        public ActionResult Index(Query<User, UserParam> query)
        {
            try
            {
                query.List = this._UserService.GetPageList(e => true, query.PageIndex, query.PageSize).AsPagedList<User>();
            }
            catch (Exception ex)
            {
                throw;
            }
            if (Request.IsAjaxRequest())
                return View("Index_Partial", query);
            else
                return View(query);
        }
    }
}
   public static class PagerListExtentsions
    {
        public static PagedList<T> AsPagedList<T>(this PageList<T> pagelist) {
            var pdl = new PagedList<T>(pagelist.Items, 1, pagelist.PageSize);
            pdl.CurrentPageIndex = pagelist.PageIndex;
            pdl.PageSize = pagelist.PageSize;
            pdl.TotalItemCount = pagelist.Total;
            return pdl;
        }
    }
    public class Query<TModel,TParam> where TParam :new()
    {
        public Query() {
            this.PageIndex = 1;
            this.PageSize = 10;
            //this._Total = 0;
            this.Params = new TParam();
        }
        public int PageIndex { get; set; }
        public int PageSize { get; set; }
        //public int _Total { get; set; }
        public string _ViewPartial { get; set; }
        public TParam Params { get; set; }
        public IEnumerable<TModel> List { get; set; }
        public bool IsHasCount(){
            return this.List != null;
        }
    }
@model Query<Bo.Model.User, Bo.Web.WorkRecordManage.Models.UserModel.UserParam>
@using Bo.Web.WorkRecordManage.Base
@using Webdiyer.WebControls.Mvc
@{
    ViewBag.Title = "Index";
}

<div class="page-content">
    <div class="container-fluid">
        <div class="row-fluid">
            <div style="padding-top:20px;" class="span12">

                <div class="alert alert-success">
                    <span class="label label-important">NOTE:</span>&nbsp;请按下方提示操作
                </div>
                @using (Html.BeginForm("Import", "User", FormMethod.Post, new { @id = "UserImport" }))
                {
                    @Html.ImportFileFor("UserImport", "User", "Import", "用户导入")
                    <a href="~/ExcelTemplate/用户导入模板.xlsx" class="btn purple">下载模板 <i class="m-icon-swapright m-icon-white"></i></a>
                }
                <div id="portlet-body">
                    @Html.RegisterPagerPartial("Index_Partial", Model)
                </div>
            </div>
        </div>
    </div>
</div>
@model Query<Bo.Model.User, Bo.Web.WorkRecordManage.Models.UserModel.UserParam>
@using Bo.Web.WorkRecordManage.Base
@using QD.Framework;
@using Webdiyer.WebControls.Mvc
@{
    Layout = null;
}

<div class="portlet box grey">

    <div class="portlet-title">
        <div class="caption"><i class="icon-cogs"></i>用户信息</div>
        <div class="tools">
        </div>
    </div>

    <div class="portlet-body flip-scroll">

        <table class="table table-bordered table-hover table-striped table-condensed flip-content">

            <thead>
                <tr>
                    <th>名称</th>
                    <th>工号</th>
                    <th>创建时间</th>
                    <th>邮件地址</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                @if (Model.IsHasCount())
                {
                    foreach (var item in Model.List)
                    {
                        <tr>
                            <td>
                                @if (item.Name.IsNullOrWhiteSpace())
                                {
                                    <button onclick="SetName(‘@item.UserID‘)" class="btn red mini">设置名字</button>
                                }
                                else
                                {
                                    @item.Name
                                }
                        </td>
                        <td>@item.UserID</td>
                        <td>@item.CreateTime</td>
                        <td>
                            @if (item.Email.IsNullOrWhiteSpace())
                            {
                                <button onclick="SetEmail(‘@item.UserID‘)" class="btn red mini">设置邮箱地址</button>
                            }
                            else
                            {
                                @item.Email
                            }
                        </td>
                        <td>
                            <button type="button" onclick="Delete(‘@item.UserID‘)" class="btn red mini">删除</button>
                            <button type="button" onclick="checkIn(‘@item.JobNumber‘,‘@item.UserID‘)" class="btn green mini">获取数据</button>
                        </td>
                    </tr>
                    }
                }
                else
                {
                    <p>暂无数据,系统没10秒更新数据一次</p>
                }
            </tbody>

        </table>
        <div class="row-fluid">
            @Ajax.Pager(
        (IPagedList)Model.List, new PagerOptions
    {
        AutoHide = false,
        PageIndexParameterName = "PageIndex",
        PrevPageText = "上页",
        NextPageText = "下页",
        FirstPageText = "首页",
        LastPageText = "尾页",
        PagerItemsSeperator = "",
        CurrentPagerItemWrapperFormatString = "<span class=\"current\">{0}</span>"
    }, new MvcAjaxOptions
    {
        UpdateTargetId = "portlet-body",
        HttpMethod = "Post"
    }, new { id = "graypager" })
        </div>
    </div>

</div>
namespace Bo.Web.WorkRecordManage.Base
{
    public static class BoRenderPartialExtensions
    {
        public static MvcHtmlString RegisterPagerPartial(this HtmlHelper htmlHelper, string partialViewName, object model)
        {
           htmlHelper.RegisterMvcPagerScriptResource();
           return htmlHelper.Partial(partialViewName, model);
        }
    }
}

如果有遗漏,请及时通知我补充;

时间: 2024-08-24 18:49:38

MVCPager使用的相关文章

MVCPager分页使用方法

public ActionResult AdminUserList(UserListModel model) { var pagedList = _userService.SearchAdminUsers(model.PageIndex, model.PageSize, model.Name, model.IsActive); model.Items = new PagedList<UserListItem>(Mapper.Map<List<UserListItem>>

MvcPager概述

MvcPager 概述 MvcPager分页控件是在ASP.NET MVC Web应用程序中实现分页功能的一系列扩展方法,该分页控件的最初的实现方法借鉴了网上流行的部分源代码, 尤其是ScottGu的PagedList<T>类和相关方法,经过站长不断完善和改进后推出的比较成熟而且功能强大的ASP.NET MVC分页解决方案. MvcPager主要功能: 实现最基本的url route分页功能: 支持手工输入或选择页索引并对输入的页索引进行有效性验证: 支持使用jQuery实现Ajax分页,生成

修改MvcPager分页控件以适用Bootstrap 效果(含英文版,可下载)

软件开发分页效果必不可少,对于Asp.Net MVC 而言,MvcPager 是个不错的选择.请访问http://www.webdiyer.com/mvcpager/ 由于自带的分页样式不能和项目整体风格兼容,所以我们准备改写源代码,使其能够使用Bootstrap 的分页样式. 先来查看两种分页的html代码 Bootstrap 样式: 1 <ul class="pagination"> 2 <li class="disabled"><

Linq多表链接分页,Select new{&quot;需要的字段列..&quot;},配合杨涛Mvcpager,前台遍历展示自定义字段

题前:,Select new{"需要的字段列.."}好处,减少不必要数据的查询,尤其是分布式的时候,网络再不好的情况下,而不必要的数据又很多,Select new{"需要的字段列.."}好处明显 如题,Linq多表链接分页,Select new{"需要的字段列.."},配合杨涛Mvcpager,前台遍历展示自定义字段 (1)  我的例子是,(Tb_Mnager)管理员表与(Tb_Role)角色表联查,返回两个表部分字段的组合 如下控制器代码: p

实战MvcPager(PagerOptions自定义样式&amp;同、异步)

ASP.NET MVC下的分页控件MvcPager用起来简直太嗨呸了,两句代码实现一个分页,而且需要改变样式的时候直接构造PagerOptions类 实战无需多说,拿来用之即可.个人觉得对性能影响不大的东西,如果不是感受其编码思想,只需了解使用功能,无需深入,就和人的生命本来就有限,取舍也因人而异 一.首先是简单拼接字符串的分页CssPager,直接改八改八样式和字符串就能用了 封装好的Html扩展方法: /// <summary> /// 分页 /// </summary> //

MVC中使用MVCPager简单分页

一.建立数据库以及建立MVC项目 自己随便建立一个数据库,并且添加数据.我建立的数据库如下. 二.建立LINQ to SQL映射. 然后一步步点确定 三.编写代码 在Controllers中建立控制器,模板为空.建立的项目如下: 要添加视图Index 在Controller中选中Index 并且添加视图, 模板选中List, 如下 注意后台要添加对MvcPager的程序集引用,后台代码如下: using Webdiyer.WebControls.Mvc; public class Student

MvcPager.js在特定业务场景下的问题解决

用到了MvcPager.js,在一个常见的场景中出现了不能POST表单数据的问题,场景描述如下: 日期:2012-12-12 编号:*****                                                                                                                         [查询] 数据列表 首页 1 2 3 ...19 尾页 页面加载完成后,如果首先点击分页页码,那么查询条件部分的日期

ASP.NET MVC 分页MvcPager

ASP.NET MVC 分页MvcPager 开源框架  admin  8个月前 (08-20)  1484浏览 他连续12年获得微软MPV称号,几年前,他写的ASP.NET分页控件,被很多.NET开发人员使用,现在他又写了名为MvcPager的分页扩展,并免费开源,支持MVC通用分页,与EF完美结合,支持AJAX分页,简单灵活,提供多个演示案例,是迄今为止最好的MVC分页方式,推荐各位ASP.NET MVC开发者使用. 分页是每个项目必须面对的技术点,不好的分页不但体验不好,而且会影响系统的整

C#_Ajax分页MVCPager

UCJqOrderList @model PagedList<Order> <div id="dvOrders"> <table width="98%"> <tr><th>订单编号</th><th>订单日期</th><th>顾客编号</th><th>收货地址</th></tr> @foreach(Order od