Search Paging and Sorting
Action:
public ActionResult Index(string searchBy, string search, int? page, string sortBy)
{
ViewBag.SortNameParameter = string.IsNullOrEmpty(sortBy) ? "Name Desc" : "";
ViewBag.SortGenderParameter = sortBy == "Gender" ? "Gender Desc" : "Gender";
var employees = db.Employees.AsQueryable();
if (searchBy == "Gender")
{
employees = employees.Where(x => x.Gender == search || search == null);
//return View(db.Employees.Where(emp => emp.Gender == search || search == null).ToList().ToPagedList(page ?? 1, 3));
}
else
{
employees = employees.Where(x => x.Name.StartsWith(search) || search == null);
//return View(db.Employees.Where(emp => emp.Name.StartsWith(search) || search == null).ToList().ToPagedList(page ?? 1, 3));
}
switch (sortBy)
{
case "Name Desc":
employees = employees.OrderByDescending(x => x.Name);
break;
case "Gender Desc":
employees = employees.OrderByDescending(x => x.Gender);
break;
case "Gender":
employees = employees.OrderBy(x => x.Gender);
break;
default:
employees = employees.OrderBy(x => x.Name);
break;
}
return View(employees.ToPagedList(page ?? 1, 3));
}
Html
@using PagedList;
@using PagedList.Mvc;
@model IPagedList<MvcDemo.Models.Employee>
<div style="font-family: 'Microsoft YaHei'">
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<p>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<b>Search By:</b>@Html.RadioButton("searchBy", "Name", true) <text>Name</text>
@Html.RadioButton("searchBy", "Gender") <text>Gender</text>
<br />
@Html.TextBox("search")
<input type="submit" value="Search" />
}
</p>
<table border="1">
<tr>
<th>
@Html.ActionLink("Name", "Index", new { sortBy = ViewBag.SortNameParameter, searchBy = Request["searchBy"], search = Request["search"] })
@*@Html.DisplayNameFor(model => model.First().Name)*@
</th>
<th>
@Html.ActionLink("Gender", "Index", new { sortBy = ViewBag.SortGenderParameter, searchBy = Request["searchBy"], search = Request["search"] })
@*@Html.DisplayNameFor(model => model.First().Gender)*@
</th>
<th>
@Html.DisplayNameFor(model => model.First().Email)
</th>
<th>Action</th>
</tr>
@if (Model.Count() == 0)
{
<tr>
<td colspan="4">There is no result matches your serach!</td>
</tr>
}
else
{
foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Gender)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</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>
@Html.PagedListPager(Model, page => Url.Action("Index",
new
{
page,
searchBy = Request["searchBy"],
search = Request["search"],
sortBy = Request["sortBy"]
}), new PagedListRenderOptions()
{
Display = PagedListDisplayMode.IfNeeded, //Default
DisplayPageCountAndCurrentLocation = true
})
</div>

浙公网安备 33010602011771号