在 Student Index 頁面實作三大核心功能:欄位排序、關鍵字搜尋、資料分頁。
public ViewResult Index(string sortOrder, string searchString, int? page) {
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.Contains(searchString) || s.FirstMidName.Contains(searchString));
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;
}
int pageSize = 3;
return View(students.ToPagedList(page ?? 1, pageSize)); // 需 PagedList 套件
}
@Html.ActionLink("姓名", "Index", new { sortOrder = ViewBag.NameSortParm })searchString@Html.PagedListPager(Model, page => Url.Action("Index", new { page, sortOrder, searchString }))IQueryable 延遲執行特性確保排序/篩選/分頁在資料庫端完成,僅傳回當頁資料,效能最佳。