分页和排序,应该是软件开发中,需要必知必会的技能了,对于分页,网上很多教程,当然,别人终究是别人的,只有自己理解,会了,并且吸收之后,再用自己的语言,传授出来,这才是硬道理。好了,废话说多了。现在我们进入正题:
这里,我打算使用英孚代码-第一方式分页控件就是用页面列表MVC,来做分页,对于排序,实现的思路是,加载数据出来之后,默认是升序排序,然后我们点击一下相应的列标题,就按照该字段降序排序,查数据。思路明确了,就开始干吧!
1.首先新建一个空白的手动音量调节项目,在模型文件夹里,新建一个学生实体
学生实体中的代码:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.命名空间PagingAndSortingInMVC .模型{公共类学生{公共int ID { get设置;}公共字符串名称{获取设置;}公共字符串做爱设置;}公共字符串电子邮件{ get设置;} public int Age { get设置;} }} 2.添加仰角指示器引用之后,我们在根目录下,在创建一个文件夹地图,在里面创建一个类学生地图
学生地图类的代码:
使用PagingAndSortingInMVC .模型;使用系统;使用系统。集合。通用;使用系统。组件模型。数据注释。模式;使用系统。数据。实体。模型配置;使用系统Linq .使用系统网络.命名空间PagingAndSortingInMVC .map { public class StudentMap : entitytypeconfigurationstudent { public StudentMap(){//配置主键这个。哈希键;//把身份列设置为自增列这个。属性HasDatabaseGeneratedOption(数据库生成选项。身份);//配置列这个。属性名HasMaxLength(50).IsRequired();这个。财产HasMaxLength(2).IsRequired();这个。属性(s=s。年龄)。IsRequired();这个。属性=电子邮件HasMaxLength(100).IsRequired();} }} 3.在根目录下,再新建一个文件夹DBHelper,在里面新建一个类StudentDBContext
StudentDBContext类的代码:
使用PagingAndSortingInMVC .地图;使用系统;使用系统。集合。通用;使用系统。数据。实体;使用系统Linq .使用系统网络.命名空间PagingAndSortingInMVC .DBHelper { public class StudentDBContext : db context { public StudentDBContext()} : base(' name=DbConnectionString ')} { protected override void on model creating(dbmodeldbuilder model builder){//因为这里只有一个实体,就不搞的那么复杂了,不用反射来做。直接添加单个实体的配置模型构建器。配置。添加(新的StudentMap());基地. OnModelCreating(模型构建器);} }} 然后在配置文件中加上:
连接字符串添加名称="数据库连接字符串"连接字符串="服务器="。数据库=MyStudentDBUID=saPWD=密码_1 '提供者名称='系统数据。SqlClient//connectionStrings具体的位置在这:
4.好了,现在实体和数据库的配置都写好了,现在我们使用数据库迁移技术【迁移】来自动生成数据库,首先打开程序包管理控制台。添加一行语句:启用-迁移,然后按回车键:
这个时候,就在我们程序中生成了一个文件夹迁徙,里面有一个类配置:
修改配置类中的代码:把AutomaticMigrationsEnabled设置为真的;并添加一句代码,让迁移过程中,没有数据丢失:automaticmigratingndatalossallowed=false;
然后在程序包管理控制台中接着输入:更新-数据库-详细
注意:【-详细和数据库资料库之间有空格】,之所以输入-冗长就是可以在控制台看到生成的结构化查询语言语句:
项目管理更新-数据库-使用启动项目' PagingAndSortingInMVC '描述。使用NuGet项目PagingAndSortingInMVC .指定“-详细”标志以查看应用于目标数据库的结构化查询语言语句。目标数据库是:“MystudentDB”(数据源:Provider:系统。数据SqlClient,Origin:配置)。没有挂起的显式迁移。正在应用自动迁移: 201607180249098 _自动迁移。创建表格[dbo].[学生]([标识][整数]不为空标识,[名称] [nvarchar](50)不为空,[性别] [nvarchar](2)不为空,[电子邮件] [nvarchar](100)不为空,[年龄] [int]不为空,约束[PK _ dbo].学生]主键([ID])创建表[dbo].[_ _迁移历史]([迁移id][nvarchar](150)不为空,[上下文键][nvarchar](300)不为空,[型号] [varbinary](最大)不为空,[产品版本][nvarchar](32)不为空,约束[PK_dbo ._ _迁移历史]主键([迁移id],[上下文键])[插入dbo].[_ _迁移历史]([迁移id],[ContextKey],[Model],[产品版本])VALUES(N ' 201607180249098 _自动迁移',N ' pagingandsortingmvc。迁徙。配置',0x1f 8 b 08000000000000400 CD 57 db 6 ed b 38107 D5 fa 0 ff 20 f 03935 ed 040 b 7403 b 9856327 BBB首相打开数据库,我们看到,就生成我们想要的数据库和表了:
既然要分页,就开始引入分页控件吧,引入页面列表。手动音量调节
5.新建一个空白模板的学生控制器。
控制器里面就是我们主要的逻辑代码了:
使用PagingAndSortingInMVC .DBHelper使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节使用页面列表使用PagingAndSortingInMVC .模型;命名空间PagingAndSortingInMVC .控制器{公共类学生控制器:控制器{私有StudentDBContext db=null public StudentController(){ db=new StudentDBContext();} ///摘要///首页【查询分页数据】////summary///param name=' sort by '根据什么排序/param///param名称=' Currentort侵权'当前排序字段/param ///param name='page '当前页/param////返回/返回公共操作结果索引(字符串排序比,字符串当前rt,int?page){ int page index=1;int page SiZe=5;//判断页,面,张,版是否有值,有的话就给值,没有就赋值一页面索引=页面哈希值?转换. ToInt32(第:页)1;视图包current start=sort by//这句必须要,否则刚开始是空的,报错,就不能循环了sortBy=字符串IsNullOrEmpty(sortBy)?名称:架次By//如果排序依据为空,就设置为名字,下面设置的时候,默认按照名称排序ipagelist学生lst student=null开关(排序方式){大小写'名称' : //如果sortBy==currentSort,就按照对应字段降序排列,并分页。否则升序如果(排序比等于(当前开始)){ lststatus=db .SetStudent().按降序排序ToPagedList(页面索引,页面大小);//根据一热心博友的建议,加上了这句,点击相应的列,升序降序循环视图包current start=null } else { lsstudent=db .SetStudent().订单方(s=s。名称)。ToPagedList(页面索引,页面大小);}休息案例Sex': //如果sortBy==currentSort,就按照对应字段降序排列,并分页。否则升序如果(排序比等于(当前开始)){ lststatus=db .SetStudent().按降序排序ToPagedList(页面索引,页面大小);//根据一热心博友的建议,加上了这句,点击相应的列,升序降序循环视图包current start=null } else { lsstudent=db .SetStudent().排序依据(s=s。性别)。ToPagedList(页面索引,页面大小);}休息案例'电子邮件' : //如果sortBy==currentSort,就按照对应字段降序排列,并分页。否则升序如果(排序比等于(当前开始)){ lststatus=db .SetStudent().按降序排序ToPagedList(页面索引,页面大小);//根据一热心博友的建议,加上了这句,点击相应的列,升序降序循环视图包current start=null } else { lsstudent=db .SetStudent().订购人(s=s .电子邮件).ToPagedList(页面索引,页面大小);}休息案例'年龄' : //如果sortBy==currentSort,就按照对应字段降序排列,并分页。否则升序如果(排序比等于(当前开始)){ lststatus=db .SetStudent().按降序排序ToPagedList(页面索引,页面大小);//根据一热心博友的建议,加上了这句,点击相应的列,升序降序循环视图包current start=null } else { lsstudent=db .SetStudent().排序依据(年代=年代)。ToPagedList(页面索引,页面大小);} breakdefault: //如果sortBy==currentSort,就按照对应字段降序排列,并分页。否则升序如果(排序比等于(当前开始)){ lststatus=db .SetStudent().按降序排序ToPagedList(页面索引,页面大小);//根据一热心博友的建议,加上了这句,点击相应的列,升序降序循环视图包current start=null } else { lsstudent=db .SetStudent().订单方(s=s。名称)。ToPagedList(页面索引,页面大小);} break}返回视图(一年级学生);}公共操作结果AddStudent(){ return View();}[httpset][validateantoforytoken]公共操作结果添加学生(学生模型){ db .SetStudent().添加(型号);db .saveChanges();返回RedirectToAction(' Index ');} }} 创建相对应的索引视图和添加学生视图:
索引视图:
@使用页面列表.Mvc@*//引入分页的组件* @ @模型页面列表.ipagedlistpagingandsortingmvc。模特。学生@ { viewpag .标题="索引";}样式表{宽度: 100%;}表tr td { border: 2px纯黑;文本对齐:中心;单词包装:断字;} table tr :悬停{底色: # 000;color: # fff}表tr th { border: 2px纯黑;文本对齐:中心;背景-color : # fff;color : # 000 }/style h2Index/h2p @ Html .ActionLink('新建','创建)/p @使用(Html .开始通知('索引','员工,表单方法Get)){ table class='table' tr th @*通过创建匿名对象,传递参数到控制器中,新{排序依据='名称',当前排序依据=视图包.CurrentSort } * @ @ *参数的大小写无所谓,只要和控制器名称一样就行、sortBy、currentSort * @ @ Html .ActionLink('名称','索引',new { sortBy='名称',currentSort=ViewBag .当前开始时间})/th @ Html .ActionLink('Sex ',' Index ',new { sortBy='Sex ',currentSort=ViewBag .当前开始时间})/th @ Html .ActionLink('Email ',' Index ',new { sortBy='Email ',currentSort=ViewBag .当前开始时间})/th @ Html .ActionLink('Age ',' Index ',new {sortBy='Age ',currentSort=ViewBag .当前端口})/th/th/tr @ foreach(模型中的定义变量项目){ tr td @Html .显示(模型项目=项目.名称)/td td @Html .显示(模型项目=项目.Sex) /td td @Html .显示(模型项目=项目.电子邮件)/td td @Html .显示(模型项目=项目.age)/TD/TD/tr }/table } div id=' Paging ' style=' text-align : center ' @ *总页数是否小于当前页,小于就说明没数据,赋值0,否则赋值页码*@页码@(型号。页面计数模型。页码?0:型号。页码)的@Model .PageCount @Html .PagedListPager(模型,页面=Url .操作('索引,新的{页面}),页面增强选项。经典)/divAddStudent视图:
@模型PagingAndSortingInMVC .模型。学生@{视图包Title=' AddStudent } H2 AddStudent/H2 @使用(Html .begin inform()){ @ Html .antiforgrytoken()div=' form-horizontal ' H4学生/H4 HR/@ Html .ValidationSummary(true,",new { @ class=' text-danger ' })div class=' form-group ' @ Html .标签(型号=型号.名称,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.名称,新的{ HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .名称',new { @ class=' text-danger ' })/div/div class=' form-group ' @ Html .标签(型号=型号.Sex,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.Sex,new { HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .Sex ' ',new { @ class=' text-danger ' })/div/div class=' form-group ' @ Html .标签(型号=型号.电子邮件,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.电子邮件,新的{ HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .电子邮件'',新的{ @ class=' text-danger ' })/div/div class=' form-group ' @ Html .标签(型号=型号.Age,HTMl Attributes s 3360 new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.Age,new { HTMl Attributes=new { @ class=' form-control ' } })@ Html .ValidationMessageFor(model=model .Age,',new { @ class=' text-danger ' })/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='提交'值=' Create ' class=' BTN BTN-默认'//div/div } div @ Html .ActionLink('Back to List ',' Index ')/div脚本src=' http : ~/Scripts/jquery-1。10 .2 .量滴js '/script script src=' http : ~/Scripts/jquery。验证。量滴js '/script script src=' http : ~/Scripts/jquery。验证。未破裂。量滴js '/脚本接着修改一下布局页:
!DOCTYPE html html head meta charset=' utf-8 '/meta name=' viewpar ' content=' width=device-width,initial-scale=1.0 ' title @ viewpag .标题-我的ASP。网应用程序/title link href=' ~/Content/site。CSS ' rel='样式表type=' text/CSS '/link href=' ~/Content/bootstrap。量滴CSS ' rel='样式表type=' text/CSS '/script src=' http : ~/Scripts/modernizr-2。6 .2 .js '/script/head dy div class=' nav bar nav bar-反向导航条-固定顶部div class=' container ' div class=' nav bar ' nav bar-collapse ' span class=' icon-bar '/span span class=' icon-bar '/span/button @ Html .ActionLink('应用程序名称','索引','主页',新{区域='' },新{ @ class='导航条-品牌' })/div div class='导航条-折叠折叠' ul class='导航条-导航' @ Html .ActionLink('学生列表','索引)@Html .ActionLink('Add Student ',' AddStudent ')/ul/div/div/class='容器正文-内容' @ render body()/HR/footer p @ DateTime .现在。年份-我的ASP。网应用程序/p/页脚/div脚本src=' http : ~/Scripts/jquery-1。10 .2 .量滴js /脚本脚本src=' http : ~/Scripts/bootstrap。量滴js /脚本/正文/html修改一下默认路由:
使用系统;使用系统。集合。通用;使用系统Linq .使用系统网络.使用系统网络。手动音量调节使用系统。网络路由;命名空间PagingAndSortingInMVC {公共类路线图公共静态作废注册路线(路线收集路线){路线} .忽略重路由(' {resource}).axd/{ * PathInfo } ');路线. MapRoute(名称:“Default”,URL :“{ controller }/{ action }/{ id }”,Default s 3360 new { controller=“Student”,action=“Index”,id=UrlParameter .可选});} }} 运行项目:
刚开始没有任何数据,我们添加几条测试数据:
我们来验证一下,结果:
看到了么,点击相应的列标题就可以进行排序了。分页也实现了。当然分页的样式可以通过改变这个选项:
@Html .PagedListPager(模型,页面=Url .操作('索引,新的{页面}),页面增强选项。经典)
这里,我修改了一下
@Html .PagedListPager(模型,页面=Url .操作('索引,新的{页面}),页面增强选项twitterbootstrapperager)
分页控件的效果就是这样了。
好了,这篇文章到此结束。
总结:分页和排序是很重要的功能,需要熟练掌握。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。