我们对之前的Views à Account à Index.cshtml 进行修改以完成今天的示例。

界面样式修改前:

下面对Views à Account à Index.cshtml进行如下修改:

  1. 应用布局页 _LayoutAdmin.cshtml

2. 将HTML部分body之外的全部删掉,只留下正文内容,运行这个页面。

对样式做一些小调整,最终变成如下样式。

(调整样式的步骤略,大家可以直接查看源码)

通过Create New 新建两条测试数据,为后面分页做准备,后面每3条分一页。

目前准备工作就OK了,下面开始今天功能的操作。

详细步骤

一、标题添加链接排序功能

  1. 打开 Controllers à AccountController.cs, 修改Index方法如下

2. 打开 ViewsàAccountàIndex.cshtml, 替换标题内容。

@Html.ActionLink("UserName", "Index", new { sortOrder = ViewBag.NameSortParm })

点击标题就可以在升序倒序中切换了

二、增加名字搜索功能

继续修改Index方法,增加条件筛选功能。改动的部分见黄色背景部分。

我们添加了一个 searchString 的参数,并且添加了一个where字句用来过滤名字。

现在我们再去ViewsàAccountàIndex.cshtml 中添加一个text box用来传递这个过滤值。

现在测试一下,运行这个页面,可以看到结果符合我们的预期。

好的,下面就完成最后一个功能,分页。

三、增加分页功能(使用PagedList.MVC)

安装PagedList.MVC

打开Package Manager Console,确保Package source是nuget.org, 输入

install-package PagedList.mvc

AccountController.cs中先添加声明。

using PagedList;

修改Index方法

Index的增加如下highlight部分(我只截取了开头和结尾的部分)

我们添加了两个传入参数 currentFilter和page

页面第一次显示或没有点击页码或排序时,所有传入的值为null

当点击分页链接时,传入页码。

current sort order需要被传入,这是因为在分页时,需要保持相同顺序。

ViewBag.CurrentSort = sortOrder;

另外一个属性, ViewBag.CurrentFilter, 提供view当前的过滤字符串。

这个值用来维持分页时过滤条件不变,并且必须在分页时重新显示在text box中。如果子分页时过滤条件改变了,页面必须重设为1,因为新的过滤条件会导致显示不同的数据. 当过滤条件改变时, searchString不为null

在最后,ToPagedList将查询结果转换成分页的一个集合传递到view中。

Note

?? 操作符叫做 null-coalescing operator.

这个操作符给可为null的类型定义一个默认值。 (page ?? 1)表示如果page为null返回1,否则返回page的值。

大家直接看下面例子:

在View中增加分页的显示和功能链接

主要增加/修改 如下部分:

顶部的@model声明指定view获得一个PagedList对象。

(原来是List对象,见注释部分)

增加@using PagedList.Mvc , 获得相关分页的helper

重载BeginForm为get方式。

我们之前文章提到过,如果不涉及更新数据操作,建议用get方式。

text box 初始化为CurrentFilter.

这样当切换到下一页是可以看到当前过滤条件。

表格的标题链接也把CurrentFilter传过去。

最后再加上类似 Page x of x格式的当前页数和总共数量。

如果没有页面显示,则显示 Page 0 of 0

这种情况下,page number>page count.

根据Index方法可以得知PageNumber是1,Model.PageCount是0.

分页按钮通过PagedListPager helper来显示。

最终结果

第二页

遗留问题

最后做了个实验,发现有个问题,知道的园友帮忙解答下。

对UserName排序没问题。

我用Email排序时,如果直接把条件加到表达式中,都是OK的,如下图。

倒序排

如果按下面这种方式

不论正序还是倒序,都出现如下结果:

问题总结,下面两种写法,第二种不符合预期。

文章引自:http://***/Article/11624

MVC5+EF6 (附加分页功能)的更多相关文章

  1. MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页

    系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (10) 数据查询页面 源码下载:点我下载 我工作的源码:http://www.jin ...

  2. MVC5+EF6入门完整教程7:排序过滤分页

    https://www.cnblogs.com/miro/p/4134241.html 前置准备 – 应用之前样式,增加测试数据 界面样式修改前: 下面对Views --> Account -- ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  4. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. MVC5+EF6 入门完整教程12--灵活控制Action权限

    大家久等了. 本篇专题主要讲述MVC中的权限方案. 权限控制是每个系统都必须解决的问题,也是园子里讨论最多的专题之一. 前面的系列文章中我们用到了 SysUser, SysRole, SysUserR ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  7. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  9. MVC5 + EF6 完整入门教程三

    期待已久的EF终于来了. 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程. 本次将会完成EF数据模型的搭建和使用. 基于这个模型,将之前的示例添加数据库查询验证功能. 文章提纲 概述 & ...

随机推荐

  1. 看了这篇文章,Java编程速度我都惊呆了

    熟记于心,打遍天下,(开始装了) 保存 Ctrl+s                    (这个就不用解释了吧!!!!) 注释代码 Ctrl+/ 取消注释 Ctrl+/代码辅助 Alt+/ 快速修复 ...

  2. js中 return false

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  3. magnetom模板制作

    我个人认为Magento模板制作的难点在于不了解Magento的架构,不会调动block.Magento的block调动几乎都是靠xml.在下面的内容会提及如何操作. 制作Magento模板的前提是: ...

  4. matlab产生正态分布样本

    mvnrnd - Multivariate normal random numbers This MATLAB function returns an n-by-d matrix R of rando ...

  5. 初始化IoC容器(Spring源码阅读)-我们到底能走多远系列(31)

    我们到底能走多远系列(31) 扯淡: 有个问题一直想问:各位你们的工资剩下来会怎么处理?已婚的,我知道工资永远都是不够的.未婚的你们,你们是怎么分配工资的? 毕竟,对自己的收入的分配差不多体现了自己的 ...

  6. GFF format

    后记: ************************************************************************ 在使用cufflinks和cuffmerge中 ...

  7. #include #import @class 的一些用法区别

    从网上查了一些资料,整理了一下,发现很多都说的比较详尽,下面摘录自网络 说一下#import同class之间的区别 在ios中我们经常会在.h和.m中引入一些类啊等等一般用的是#import来进行声明 ...

  8. Java-->IO流模拟实现用户登录以及登录信息

    --> Test 测试类 package com.dragon.java.hwlogin; import java.io.FileNotFoundException; import java.u ...

  9. window.opener用法

    [转]window.opener用法 window.opener 实际上就是通过window.open打开的窗体的父窗体. 比如在父窗体parentForm里面 通过 window.open(&quo ...

  10. c 深度剖析 1

    1.register register 变量必须是能被CPU寄存器所接受的类型(32 位机器 寄存器为32位),必须是单个的值,长度小于或等于整形的长度 不能用&来获取register 变量的 ...