博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
演练5-2:Contoso大学校园管理2
阅读量:4635 次
发布时间:2019-06-09

本文共 7321 字,大约阅读时间需要 24 分钟。

一、添加列标题排序功能

      我们将增加Student/Index页面的功能,为列标题添加超链接,用户可以点击列标题对那一列进行排序。

1.修改Index方法

public ActionResult Index(string sortOrder){   ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name_desc" : "";   ViewBag.DateSortParm = sortOrder == "Date" ? "Date_desc" : "Date";   var students = from s in db.Students                  select s;   switch (sortOrder)   {      case "Name_desc":         students = students.OrderByDescending(s => s.LastName);         break;      case "Date":         students = students.OrderBy(s => s.EnrollmentDate);         break;      case "Date_desc":         students = students.OrderByDescending(s => s.EnrollmentDate);         break;      default:         students = students.OrderBy(s => s.LastName);         break;   }   return View(students.ToList());}

      第一次Index页面响应的时候,没有query string,学生按照LastName升序排序,这是?:表达式的默认值,switch 语句执行升序操作。当用户点击列标题的超链接,正确的sortOrder参数传给query string。

      两个ViewBag变量用来区分列标题的超链接,是选择哪一个query string。

2.在Student\Index视图中,添加列标题超链接

@Html.ActionLink("Create New", "Create")

@foreach (var item in Model) {
@Html.ActionLink("Last Name", "Index", new { sortOrder = ViewBag.NameSortParm }) First Name @Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm })

       运行验证效果。

二、添加一个搜索文本框

      添加一个按照first name、last name搜索的文本框,实现对数据的过滤。

1.Index方法中添加过滤功能

public ViewResult Index(string sortOrder, string searchString){    ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";    ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";    var students = from s in db.Students                   select s;    if (!String.IsNullOrEmpty(searchString))    {        students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper())                               || s.FirstMidName.ToUpper().Contains(searchString.ToUpper()));    }    switch (sortOrder)    {        case "name_desc":            students = students.OrderByDescending(s => s.LastName);            break;        case "Date":            students = students.OrderBy(s => s.EnrollmentDate);            break;        case "date_desc":            students = students.OrderByDescending(s => s.EnrollmentDate);            break;        default:            students = students.OrderBy(s => s.LastName);            break;    }    return View(students.ToList());}

2.在Index视图中添加Search文本框

@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm()){

Find by name: @Html.TextBox("SearchString")

}

      运行查看效果。

      细心的同学有没有发现神马问题?搜索和排序功能同时能用么?

 三、添加分页功能

      我们将使用PagedList.Mvc NuGet包,实现分页功能。

1.安装PagedList.MVC NuGet Package

      PagedList包安装了一个PagedList集合类型,并且扩展方法适用于IQueryable和IEnumerable集合。

2.为Index方法添加分页功能

using PagedList;
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page){   ViewBag.CurrentSort = sortOrder;   ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";   ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";   if (searchString != null)   {      page = 1;   }  else   {      searchString = currentFilter;   }   ViewBag.CurrentFilter = searchString;   var students = from s in db.Students                  select s;   if (!String.IsNullOrEmpty(searchString))   {      students = students.Where(s => s.LastName.ToUpper().Contains(searchString.ToUpper())                             || s.FirstMidName.ToUpper().Contains(searchString.ToUpper()));   }   switch (sortOrder)   {      case "name_desc":         students = students.OrderByDescending(s => s.LastName);         break;      case "Date":         students = students.OrderBy(s => s.EnrollmentDate);         break;      case "date_desc":         students = students.OrderByDescending(s => s.EnrollmentDate);         break;      default:  // Name ascending          students = students.OrderBy(s => s.LastName);         break;   }   int pageSize = 3;   int pageNumber = (page ?? 1);   return View(students.ToPagedList(pageNumber, pageSize));}

 3.在Student\Index视图,添加页码链接

@model PagedList.IPagedList
@using PagedList.Mvc;
@{ ViewBag.Title = "Students";}

Students

@Html.ActionLink("Create New", "Create")

@using (Html.BeginForm("Index", "Student", FormMethod.Get)){

Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)

}
@foreach (var item in Model) {
}
@Html.ActionLink("Last Name", "Index", new { sortOrder=ViewBag.NameSortParm, currentFilter=ViewBag.CurrentFilter }) First Name @Html.ActionLink("Enrollment Date", "Index", new { sortOrder = ViewBag.DateSortParm, currentFilter = ViewBag.CurrentFilter })
@Html.ActionLink("Edit", "Edit", new { id=item.StudentID }) | @Html.ActionLink("Details", "Details", new { id=item.StudentID }) | @Html.ActionLink("Delete", "Delete", new { id=item.StudentID }) @Html.DisplayFor(modelItem => item.LastName) @Html.DisplayFor(modelItem => item.FirstMidName) @Html.DisplayFor(modelItem => item.EnrollmentDate)
Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount@Html.PagedListPager( Model, page => Url.Action("Index", new { page, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter }) )

      你可以使用PagedListPager帮助器定制自己的分页效果,包括URLs和样式,查看更多信息请点击 on the GitHub site。

      @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)  中,ViewBag的值绑定都SearchString文本框上。

四、创建学生数据分析页面

      在About页面中,我们将显示每天有多少学生注册。

1.创建视图模型

using System;using System.ComponentModel.DataAnnotations;namespace ContosoUniversity.ViewModels{    public class EnrollmentDateGroup    {        [DataType(DataType.Date)]        public DateTime? EnrollmentDate { get; set; }        public int StudentCount { get; set; }    }}

2.修改Home控制器

using ContosoUniversity.DAL;using ContosoUniversity.ViewModels;
public class HomeController : Controller    {        private SchoolContext db = new SchoolContext();
public ActionResult About(){    var data = from student in db.Students               group student by student.EnrollmentDate into dateGroup               select new EnrollmentDateGroup()               {                   EnrollmentDate = dateGroup.Key,                   StudentCount = dateGroup.Count()               };    return View(data);}
protected override void Dispose(bool disposing){    db.Dispose();    base.Dispose(disposing);}

3.修改About视图

@model IEnumerable
@{ ViewBag.Title = "Student Body Statistics";}

Student Body Statistics

@foreach (var item in Model) {
}
Enrollment Date Students
@Html.DisplayFor(modelItem => item.EnrollmentDate) @item.StudentCount

 

转载于:https://www.cnblogs.com/meetyy/p/4026095.html

你可能感兴趣的文章
洛谷 1604——B进制星球(高精度算法)
查看>>
IntelliJ IDEA 的Project structure说明
查看>>
Java Security(JCE基本概念)
查看>>
Linux Supervisor的安装与使用入门
查看>>
AngularJS和DataModel
查看>>
在进行商业运算时解决BigDecimal的精度丢失问题
查看>>
创建 PSO
查看>>
JasperReport报表设计4
查看>>
项目活动定义 概述
查看>>
团队冲刺04
查看>>
MAC和windows开发操作系统环境,解决Maven工程中报 Missing artifact jdk.tools:jdk.tools
查看>>
我的Python分析成长之路8
查看>>
泛型在三层中的应用
查看>>
云栖社区> > 正文 永久免费SSL安全证书Letsencrypt安装使用方法
查看>>
SharePoint2010 -- 管理配置文件同步
查看>>
jq--ajax中止请求
查看>>
客户资料查询传递数据格式
查看>>
.Net MVC3中取得当前区域的名字(Area name)
查看>>
(循环练习题) 五只猴子分桃子
查看>>
获得屏幕像素以及像素密度
查看>>