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>

posted @ 2015-05-07 13:56  不是那人  阅读(151)  评论(0)    收藏  举报