接着分页功能的基础上,补充点击表头字段进行降序/升序排序的功能。
1.重写Home控制器中的Index动作方法:
public ActionResult Index(string search, string searchby, int? page, string sortBy)
{
//给sortByXXX做一个初始化赋值操作,用于页面加载时
ViewBag.sortByName = string.IsNullOrEmpty(sortBy) ? "Name desc" : "";
ViewBag.sortByGender = sortBy == "Gender" ? "Gender desc" : "Gender";
ViewBag.sortByAge = sortBy == "Age" ? "Age desc":"Age";
var emp = dbe.Employee.AsQueryable();//1.查询所有Employee记录
//2.按Name或Gender类别进行过滤处理,否则不过滤
if (searchby == "Name")//按Name查询,如果未输入直接查询,则查询所有数据
{
emp = emp.Where(e => e.Name.StartsWith(search) || search == null);
}
else
{//按Gender进行查询,如果未输入直接查询,则查询所有数据
emp = emp.Where(e => e.Gender == search || search == null);
}
//3.排序处理
switch (sortBy) {
case "Name desc":
emp = emp.OrderByDescending(o => o.Name);
break;
case "Gender desc":
emp = emp.OrderByDescending(o=>o.Gender);
break;
case "Gender":
emp = emp.OrderBy(o=>o.Gender);
break;
case "Age desc":
emp = emp.OrderByDescending(o=>o.Age);
break;
case "Age":
emp = emp.OrderBy(o => o.Age);
break;
default:
emp = emp.OrderBy(o=>o.Name);
break;
}
return View(emp.ToPagedList(page ?? 1,3));//4.传入分页后的数据
}
修改对应的Index视图:
@using PagedList
@using PagedList.Mvc
@model IPagedList<Web_SearchDemo.Models.Employee>
@*@model IEnumerable<Web_SearchDemo.Models.Employee>*@
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
@Html.TextBox("search", null, htmlAttributes: new { @class = "form-control" })
@Html.RadioButton("searchby", "Name", true) <text>Name</text>
@Html.RadioButton("searchby", "Gender", true) <text>Gender</text>
<input type="submit" value="Search" class="btn btn-primary" />
}
@*<p>
@Html.ActionLink("Create New", "Create")
</p>*@
<table class="table">
<tr>
<th>
@*@Html.DisplayNameFor(model => model.First().Name)*@
@Html.ActionLink("Name","Index",new { sortBy= ViewBag.sortByName, search=Request.QueryString["search"],searchby=Request.QueryString["searchby"] })
</th>
<th>
@*@Html.DisplayNameFor(model => model.First().Age)*@
@*以url拼接字符串的形式传参*@
@Html.ActionLink("Age", "Index", new { sortBy = ViewBag.sortByAge, search = Request.QueryString["search"], searchby = Request.QueryString["searchby"] })
</th>
<th>
@Html.ActionLink("Gender", "Index", new { sortBy = ViewBag.sortByGender, search = Request.QueryString["search"], searchby = Request.QueryString["searchby"] })
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
<td>
@Html.DisplayFor(modelItem => item.Gender)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.Id }) |
@Html.ActionLink("Details", "Details", new { id = item.Id }) |
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
</td>
</tr>
}
</table>
@*DisplayPageCountAndCurrentLocation=true*@
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, searchBy = Request.QueryString["searchby"], search = Request.QueryString["search"] }), new PagedListRenderOptions() { Display = PagedListDisplayMode.IfNeeded,DisplayItemSliceAndTotal=true })
<h3 style="color:red">@ViewBag.message</h3>
运行程序:
点击Age表头字段:
实现降序排序