MVC5学习系列——排序、过滤、分页
来源:互联网 发布:java工程师刚入职 编辑:程序博客网 时间:2024/06/07 07:08
MVC5学习笔记,这次练习一下MVC列表的排序、筛选、分页。参考官网地址:Sorting, Filtering, and Paging with the Entity Framework in an ASP.NET MVC Application。
这次我们从头开始,首先我们创建一个空的MVC应用程序,之后先做一下准备工作,我们在根目录下添加Content文件夹并在创建子文件夹Bootstrap/3.3.6用来存放样式文件,然后Views文件夹中创建Shared/_LayoutMovie.cshtml布局文件,代码如下:
<span style="font-size:18px;"><!DOCTYPE html><html><head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - 我的电影</title> <link href="~/Content/Bootstrap/3.3.6/bootstrap.min.css" rel="stylesheet" /></head><body> <div class="container"> @RenderBody() </div></body></html></span>随后,添加模型—Movie,代码如下:
<span style="font-size:18px;">using System;using System.ComponentModel.DataAnnotations;namespace DDZ.MVC5Paging.Models{ public class Movie { public int ID { get; set; } [Display(Name = "电影名称")] [Required] [MinLength(3)] [MaxLength(50)] public string Title { get; set; } [Display(Name = "发行日期")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] public DateTime ReleaseDate { get; set; } [Display(Name = "电影类型")] [StringLength(50)] public string Genre { get; set; } [Display(Name = "电影售价")] [Range(0, 100)] public decimal Price { get; set; } }}</span>然后,我们选中“包含视图的MVC控制器(使用Entity Framework)”,按照下图创建控制器:
在调试之前呢,首先修改一下默认路由和web.config,如下图:
<span style="font-size:18px;">public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Movies", action = "Index", id = UrlParameter.Optional } ); } }</span>
<span style="font-size:18px;"> <connectionStrings> <!--<add name="DDZMVC5PagingContext" connectionString="Data Source=(localdb)\MSSQLLocalDB; Initial Catalog=DDZMVC5PagingContext-20160214174718; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DDZMVC5PagingContext-20160214174718.mdf" providerName="System.Data.SqlClient" />--> <add name="DDZMVC5PagingContext" connectionString="Data Source=.;Initial Catalog=DDZMVC5PagingContext;uid=sa; pwd=sa;" providerName="System.Data.SqlClient" /> </connectionStrings></span>在配置完这些之后,我们开始调试。因为是第一次调试,程序会自动创建数据库,然后我们先插入一些数据,如下图:
重点正式开始:首先是排序,看一下视图页面代码
<span style="font-size:18px;"> <tr> <th> @Html.ActionLink("电影名称", "Index", new { sortOrder = ViewBag.TitleSortParm}) </th> <th> @Html.ActionLink("发布日期", "Index", new { sortOrder = ViewBag.ReleaseDateSortParm}) </th> <th> @Html.ActionLink("体裁", "Index", new { sortOrder = ViewBag.GenreSortParm}) </th> <th> @Html.ActionLink("票价", "Index", new { sortOrder = ViewBag.PriceSortParm }) </th> <th></th> </tr></span>接着是Movies控制器Index方法:
<span style="font-size:18px;">public ActionResult Index(string sortOrder) { ViewBag.TitleSortParm = String.IsNullOrEmpty(sortOrder) ? "title_desc" : ""; ViewBag.ReleaseDateSortParm = sortOrder == "date" ? "date_desc" : "date"; ViewBag.GenreSortParm = sortOrder == "genre" ? "genre_desc" : "genre"; ViewBag.PriceSortParm = sortOrder == "price" ? "price_desc" : "price"; var movies = from s in db.Movies select s; switch (sortOrder) { case "title_desc": movies = movies.OrderByDescending(s => s.Title); break; case "date": movies = movies.OrderBy(s => s.ReleaseDate); break; case "date_desc": movies = movies.OrderByDescending(s => s.ReleaseDate); break; case "genre": movies = movies.OrderBy(s => s.Genre); break; case "genre_desc": movies = movies.OrderByDescending(s => s.Genre); break; case "price": movies = movies.OrderBy(s => s.Price); break; case "price_desc": movies = movies.OrderByDescending(s => s.Price); break; default: movies = movies.OrderBy(s => s.Title); break; } return View(movies.ToList()); }</span>结果如下图:
其次是过滤搜索,先看一下修改的视图代码:
<p> @Html.ActionLink("添加电影", "Create")</p><span style="background-color: rgb(255, 255, 102);">@using (Html.BeginForm("Index", "Movies", FormMethod.Get, new { @class = "form-inline" })){ <p> 电影名称: @Html.TextBox("searchMovieTitle", null, new { @class = "form-control", @placeholder = "请输入电影名称" }) 体裁: @Html.DropDownList("searchMovieGenre", ViewData["searchMovieGenreList"] as SelectList, "请选择体裁", new { @class = "form-control" }) <input type="submit" value="查询" class="btn btn-default" /> </p>}</span><table class="table"> <tr> <th> @Html.ActionLink("电影名称", "Index", new { sortOrder = ViewBag.TitleSortParm<span style="background-color: rgb(255, 255, 51);">, searchMovieTitle = ViewData["searchMovieTitle"], searchMovieGenre = ViewData["searchMovieGenre"] </span>}) </th> <th> @Html.ActionLink("发布日期", "Index", new { sortOrder = ViewBag.ReleaseDateSortParm<span style="background-color: rgb(255, 255, 51);">, searchMovieTitle = ViewData["searchMovieTitle"], searchMovieGenre = ViewData["searchMovieGenre"] </span>}) </th> <th> @Html.ActionLink("体裁", "Index", new { sortOrder = ViewBag.GenreSortParm<span style="background-color: rgb(255, 255, 51);">, searchMovieTitle = ViewData["searchMovieTitle"], searchMovieGenre = ViewData["searchMovieGenre"] </span>}) </th> <th> @Html.ActionLink("票价", "Index", new { sortOrder = ViewBag.PriceSortParm<span style="background-color: rgb(255, 255, 51);">, searchMovieTitle = ViewData["searchMovieTitle"], searchMovieGenre = ViewData["searchMovieGenre"] </span>}) </th> <th></th> </tr>再看一下,后台代码:
public ActionResult Index(string sortOrder, string searchMovieTitle, string searchMovieGenre) { <span style="background-color: rgb(255, 255, 51);">//搜索 ViewData["searchMovieTitle"] = searchMovieTitle; ViewData["searchMovieGenre"] = searchMovieGenre;</span> var movies = from s in db.Movies select s; <span style="background-color: rgb(255, 255, 51);"> //绑定下拉框 var GenreQry = from d in movies select d.Genre; ViewData["searchMovieGenreList"] = new SelectList(GenreQry.Distinct()); //搜索 if (!String.IsNullOrEmpty(searchMovieTitle)) { movies = movies.Where(s => s.Title.Contains(searchMovieTitle)); } if (!string.IsNullOrEmpty(searchMovieGenre)) { movies = movies.Where(x => x.Genre == searchMovieGenre); }</span> //排序 ViewBag.TitleSortParm = String.IsNullOrEmpty(sortOrder) ? "title_desc" : ""; ViewBag.ReleaseDateSortParm = sortOrder == "date" ? "date_desc" : "date"; ViewBag.GenreSortParm = sortOrder == "genre" ? "genre_desc" : "genre"; ViewBag.PriceSortParm = sortOrder == "price" ? "price_desc" : "price"; switch (sortOrder) { case "title_desc": movies = movies.OrderByDescending(s => s.Title); break; case "date": movies = movies.OrderBy(s => s.ReleaseDate); break; case "date_desc": movies = movies.OrderByDescending(s => s.ReleaseDate); break; case "genre": movies = movies.OrderBy(s => s.Genre); break; case "genre_desc": movies = movies.OrderByDescending(s => s.Genre); break; case "price": movies = movies.OrderBy(s => s.Price); break; case "price_desc": movies = movies.OrderByDescending(s => s.Price); break; default: movies = movies.OrderBy(s => s.Title); break; } return View(movies.ToList()); }
最后是分页,首先在“程序包管理控制台” 安装 PagedList.Mvc——Install-Package PagedList.Mvc
安装成功之后,先看一下视图页面修改的代码:
@*@model IEnumerable<DDZ.MVC5Paging.Models.Movie>*@@model PagedList.IPagedList<DDZ.MVC5Paging.Models.Movie>@using PagedList.Mvc;
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount@Html.PagedListPager(Model, pageNum => Url.Action("Index", new { pageNum, searchMovieTitle = ViewData["searchMovieTitle"], searchMovieGenre = ViewData["searchMovieGenre"], sortOrder = ViewBag.CurrentSort }))然后再看一下,后台代码:
public ActionResult Index(string sortOrder, string searchMovieTitle, string searchMovieGenre<span style="background-color: rgb(255, 255, 51);">, int? pageNum</span>) { <span style="background-color: rgb(255, 255, 51);"> //分页 ViewBag.CurrentSort = sortOrder;</span> //搜索 ViewData["searchMovieTitle"] = searchMovieTitle; ViewData["searchMovieGenre"] = searchMovieGenre; var movies = from s in db.Movies select s; //绑定下拉框 var GenreQry = from d in movies select d.Genre; ViewData["searchMovieGenreList"] = new SelectList(GenreQry.Distinct()); //搜索 if (!String.IsNullOrEmpty(searchMovieTitle)) { movies = movies.Where(s => s.Title.Contains(searchMovieTitle)); } if (!string.IsNullOrEmpty(searchMovieGenre)) { movies = movies.Where(x => x.Genre == searchMovieGenre); } //排序 ViewBag.TitleSortParm = String.IsNullOrEmpty(sortOrder) ? "title_desc" : ""; ViewBag.ReleaseDateSortParm = sortOrder == "date" ? "date_desc" : "date"; ViewBag.GenreSortParm = sortOrder == "genre" ? "genre_desc" : "genre"; ViewBag.PriceSortParm = sortOrder == "price" ? "price_desc" : "price"; switch (sortOrder) { case "title_desc": movies = movies.OrderByDescending(s => s.Title); break; case "date": movies = movies.OrderBy(s => s.ReleaseDate); break; case "date_desc": movies = movies.OrderByDescending(s => s.ReleaseDate); break; case "genre": movies = movies.OrderBy(s => s.Genre); break; case "genre_desc": movies = movies.OrderByDescending(s => s.Genre); break; case "price": movies = movies.OrderBy(s => s.Price); break; case "price_desc": movies = movies.OrderByDescending(s => s.Price); break; default: movies = movies.OrderBy(s => s.Title); break; } return View(<span style="background-color: rgb(255, 255, 51);">movies.ToPagedList(pageNum ?? 1, 3)</span>); //return View(movies.ToList()); }最后我们看一下截图:
哈哈,今天就写到这里吧!谢谢!
代码下载:http://download.csdn.net/download/duyelang/9432384
1 0
- MVC5学习系列——排序、过滤、分页
- MVC5学习系列——HelloWorld
- MVC5学习系列——添加视图
- MVC5学习系列—添加查询
- MVC5学习系列——详解编辑操作
- 在ASP.NET MVC5中实现具有服务器端过滤、排序和分页的GridView
- 译文:使用MVC5的Entity Framework 6入门(三)——排序、筛选和分页
- 使用EF6和MVC5实现一个简单的选课系统--排序、过滤和分页(3/12)
- MVC5 + EF6 + Bootstrap3 (11) 排序、搜索、分页
- MVC5 Entity Framework学习之添加排序、筛选和分页功能
- MVC5学习系列——添加模型(Model)、链接字符串
- MVC5学习系列——从控制器访问模型的数据(添加、修改、删除)
- MVC5+EasyUI企业开发框架系列(01)—总体介绍
- MVC5学习小记(5) pagedlist分页+EF
- ListView控件学习系列3-ListView选择,排序,分页
- SPGridView(实现分页,排序,过滤,菜单)
- ECSide基于数据库的分页、排序、过滤
- jqwidgets之jqxGrid后台分页排序过滤
- Python实现ID3算法决策树
- rocketmq问题汇总-instanceName参数何时该设置?
- android——wifi系统架构
- 模型mutablearray的排序
- debian下postgresql数据迁移
- MVC5学习系列——排序、过滤、分页
- Kafka 常用命令
- Php_Memcache_详解
- 2016_02_14_新的开始
- 概率统计基础:知识框架
- log4j.properties配置文件详解
- rocketmq问题汇总-一个consumerGroup只对应一个topic
- rocketmq3.26研究之三NameServer
- Protobuf Lesson 2: Data Model for Multiple Message Types