手机版

MVC5 EF6 Bootstrap3 (11)实现排序、搜索、分页

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

在这一节中,我们向这个页面添加了排序、搜索和分页功能。

分类

从上图的地址栏中可以看到,该页面在公司控制器下调用索引操作。因此,我们首先在Controller文件夹下打开CompanyController.cs文件,并编写以下代码:

使用系统。Linq使用系统。Web . Mvc使用SlarkInc。DAL使用系统;命名空间SlarkInc。控制器{公共类company Controller : Controller {私有company context db=new company context();公共视图结果索引(字符串排序顺序){视图包。第一个名称排序参数=字符串。IsNullOrEmpty(sortOrder)?first _ desc“:”;视图包。LastNameSortParm=sort order==' last '?last _ desc ' : ' last ';var workers=从w开始,单位为db。工人选择w;switch(sort order){ case ' first _ desc ' : workers=workers。orderByDensing(w=w . first name);打破;案例‘last _ desc’:工人=工人。orderby DEcending(w=w . last name);打破;案例'最后' :工人=工人。order by(w=w . last name);打破;default:工人=工人。order by(w=w . first NAmE);打破;}返回视图(工人。ToList());在第11行中,参数“索引操作的排序顺序”用于将排序信息传递给控制器。SortOrder有四个可能的值。这四个值包含在开关中.17到31行的案例陈述。在first_desc的情况下,名字按降序排列。在姓氏为desc的情况下,姓氏的排列顺序是相反的。在姓氏的情况下,姓氏由OrderBy函数排序。如果名字为空,则排序。第13-14行使用视图包存储当前排列的反向排列字符串,该字符串用于在视图中生成链接。在第15-16行,用Linq to Entity从数据库中选择要排序的数据。第32行将排序后的数据以列表的形式传输到视图。

在对应的View文件~ \ Views \ Company \ Index.cshtml中,修改其表头,代码如下。

tr th @Html。ActionLink('名字','索引',new { sortOrder=ViewBag。first namesortparm })/th @ Html。ActionLink('姓氏','索引',new { sort order=viewpag . lastnamesor RM })的黄色部分/th @ html . display Name for(model=model . sex)/th @ html . display Name for(model=model . rating)/th/tr是修改后的代码。我们将纯文本的标题改为超链接,链接的参数是从ViewBag获得的。点击链接,获得与当前排序相反的排序效果。

通过浏览器查看此页面。然后点击姓氏链接,会根据上面的代码生成如下页面:

参数sortOrder是最后一个,那么这个表按照姓氏的顺序排列。

搜索

一般查询页面会有搜索功能,帮助我们查看我们想要的页面。让我们实现这个函数。

或者从控制器,索引操作的代码编写如下:

公共视图结果索引(字符串sortOrder,字符串searchString){视图包。第一个名称排序参数=字符串。IsNullOrEmpty(sortOrder)?first _ desc“:”;视图包。LastNameSortParm=sort order==' last '?last _ desc ' : ' last ';var workers=从w开始,单位为db。工人选择w;if(!字符串。IsNullOrEmpty(search string)){ workers=workers。其中(w=w . first name . contains(search string)| | w . last name . contains(search string));} switch(sort order){ case ' first _ desc ' : workers=workers。orderByDensing(w=w . first name);打破;案例‘last _ desc’:工人=工人。orderby DEcending(w=w . last name);打破;案例'最后' :工人=工人。order by(w=w . last name);打破;default:工人=工人。order by(w=w . first NAmE);打破;}返回视图(工人。ToList());}上面代码的黄色部分是我们添加的。第一行,搜索字符串,将用于搜索的字符串传递给控制器。第7行,当字符串不为空时进行搜索。这里的搜索使用Linq中的Where函数,该函数通过Lambda表达式过滤掉合格的数据。这个条件是由第9-10行的“或”连接的两个“包含”函数。Contains函数指示它所属的字符串是否包含它的参数字符串。整个筛选条件意味着返回其名字或姓氏包含筛选字符串的所有记录。

看下面~ \视图\公司\索引. cshtml的变化:

@使用(Html。begin inform()){ p按名称查找: @Html。TextBox('SearchString ','',new { @class='form-control ',@ style=' display : inline ' })@ html . submit(' submit ')/p }将这些代码添加到表格的顶部,表格是一个窗体,包括一个输入框和一个提交按钮。此表单会将输入框中的搜索字符串提交给当前控制器,以完成搜索操作。在输入框中,增加了类和样式,使Bootstrap美化。

通过浏览器查看此页面,在搜索框中输入b并提交,将出现以下页面:

您可以看到搜索结果是名字或姓氏包含b的所有记录(不考虑大小写)。

标页数

分页是数据查询不可避免的。这里我们使用一个名为PagedList的插件来实现这个功能。

从菜单栏中选择工具-库包管理-包管理控制台,如下所示。

然后,您将在Visual Studio窗口的底部看到一个包管理控制台窗口。输入安装包页面列表。里面有Mvc。页面列表会自动安装在项目中。窗户看起来是这样的。

安装分页列表后,我们将开始修改代码,从控制器开始:

使用系统Linq .使用系统网络。手动音量调节使用SlarkInc .木豆使用系统;使用页面列表命名空间SlarkInc .控制器{公共类公司控制器:控制器{私有公司上下文db=新公司上下文();公共视图结果索引(字符串排序顺序,字符串搜索字符串,字符串当前过滤器,整数?页面){ ViewBag .当前排序视图包。第一个名称排序参数=字符串IsNullOrEmpty(sortOrder)?first _ desc“:”;视图包LastNameSortParm=排序顺序==' last '?last _ desc ' : ' last ';if(searchString!=null){ page=1;} else {搜索字符串=CurrentFilter} ViewBag .current filter=search stringvar workers=从w开始,单位为db .工人选择w;if(!字符串IsNullOrEmpty(搜索字符串)){ workers=workers .其中(w=w .名字。包含(搜索字符串)| | w .姓氏。包含(搜索字符串));} switch(排序顺序){ case ' first _ desc ' : workers=workers .orderbydencing(w=w .名字);打破;案例last _ desc':工人=工人orderby DEcending(w=w .姓氏);打破;案例'最后' :工人=工人订单方(w=w .姓氏);打破;默认值:工人=工人order by(w=w . first NAmE);打破;} int page SiZe=3;int pageNumber=(页面?1);返回视图(工人ToPagedList(页码,页面大小));} }}黄色标记的为需要改动的部分。第5行,需要引用页面列表。第12行当前过滤器参数用来在翻页时保持搜索字符串不丢失。第17到25行的作用是,当有一个新的字符串要搜索,那么翻当前页就自动变成第一页,否则,当前页不变。第49-51行设置每页3条数据,设置页数,并将数据以目录的形式发送个视图。其中(页面?1)的意思是如果页,面,张,版为空则给页,面,张,版赋值为一否则,第页不为空那么该是多少就是多少。所以能让默认页为1.

@model PagedList .使用页面列表的工作人员@模型. Mvlink href=' ~/Content/page d list。CSS ' rel='样式表/br/使用(Html .开始通知('索引','公司,表单方法获取){ p按名称查找: @Html .文本框('搜索字符串,视图包当前过滤器.作为字符串,new { @class='form-control ',@ Style=' display : inline ' })@ Html .提交(“提交”)/p } table class=“table”tr th @ Html .ActionLink('名字','索引,new { sortOrder=ViewBag .first namesortparm })/th @ Html .ActionLink('姓氏','索引,new { sortOrder=ViewBag .lastnamesortParm })/th ThSex/th ThRating/th/tr @ foreach(模型中的定义变量项目){ tr td @Html .显示(模型项目=项目.FirstName) /td td @Html .显示(模型项目=项目.姓氏)/td td @Html .显示(模型项目=项目.Sex) /td td @Html .显示(模型项目=项目.评级)/td /tr }/tablebr/Page @(型号。页面计数模型。页码?0 :型。页码)的@Model .PageCount@Html .PagedListPager(模型,页面=Url .操作('索引,新{页面,排序顺序=视图包CurrentSort,currentFilter=ViewBag .CurrentFilter}))第一行定义了页面列表类型的模型。第2行引用页面列表。第3行,引入,页面列表相关的钢性铸铁文件,这个文件在安装插件的时候会自动保存到项目里。第5行开始通知函数的参数有变化,其生成的形式会使用得到方法获取方法会在全球资源定位器(统一资源定位符)里显示提交的参数,这样可以通过全球资源定位器(统一资源定位符)来记录查询参数,方便通过复制全球资源定位器(统一资源定位符)给他人来展现自己的查询结果。第42行用于显示第几页,共几页。第43-44行,用于生成每一页的按钮。

运行此页面,当页面出来时点击页面下方的'2'按钮转到第2页。生成的页面如下所示:

可以看到页面下方的分页按钮和页数统计,美观大方。

结尾

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

版权声明:MVC5 EF6 Bootstrap3 (11)实现排序、搜索、分页是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。