如何在ASP.NET MVC的Index方法中传递布尔筛选参数
实现按删除状态过滤学生列表的修改方案
1. 修改StudentsController的Index方法
添加可空布尔类型参数接收过滤值,补充过滤逻辑,传递参数到视图并修正原代码笔误:
public ActionResult Index(string sortOrder, string searchString, bool? isFeaturedFilter) { var students = from m in db.Students select m; // 排序逻辑 ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "name_desc" : ""; switch (sortOrder) { case "name_desc": students = students.OrderByDescending(s => s.StudentLName); break; default: students = students.OrderBy(s => s.StudentFName); break; } // 搜索逻辑 if (!String.IsNullOrEmpty(searchString)) { students = students.Where(s => s.StudentLName == searchString || s.StudentFName.Contains(searchString)); } // 新增删除状态过滤逻辑 if (isFeaturedFilter.HasValue) { students = students.Where(s => s.IsFeatured == isFeaturedFilter.Value); } // 传递当前参数到视图,保留状态并用于按钮高亮 ViewBag.CurrentSearch = searchString; ViewBag.CurrentSort = sortOrder; ViewBag.IsFeaturedFilter = isFeaturedFilter; return View(students); }
2. 修改Index.cshtml的按钮逻辑
点击按钮时带上现有搜索和排序参数,避免状态丢失:
<div class="btn-group" role="group" aria-label="Filter by IsFeatured"> <button type="button" class="btn btn-primary @((ViewBag.IsFeaturedFilter == null) ? "active" : "")" onclick="location.href='@Url.Action("Index", "Students", new { sortOrder = ViewBag.CurrentSort, searchString = ViewBag.CurrentSearch })'"> All </button> <button type="button" class="btn btn-primary @((ViewBag.IsFeaturedFilter == true) ? "active" : "")" onclick="location.href='@Url.Action("Index", "Students", new { sortOrder = ViewBag.CurrentSort, searchString = ViewBag.CurrentSearch, isFeaturedFilter = true })'"> Deleted </button> <button type="button" class="btn btn-primary @((ViewBag.IsFeaturedFilter == false) ? "active" : "")" onclick="location.href='@Url.Action("Index", "Students", new { sortOrder = ViewBag.CurrentSort, searchString = ViewBag.CurrentSearch, isFeaturedFilter = false })'"> Not Deleted </button> </div>
关键说明
- 使用
bool?(可空布尔类型)接收isFeaturedFilter参数,支持null(All)、true(Deleted)、false(Not Deleted)三种过滤状态 - 按钮跳转时携带
sortOrder和searchString参数,确保用户之前的搜索和排序状态不会被重置 - 修正原控制器代码中的笔误:将
subjects替换为students,否则排序逻辑会抛出异常 - 通过
ViewBag.IsFeaturedFilter控制按钮的active类显示,标记当前选中的过滤状态
内容的提问来源于stack exchange,提问作者khurj
相关产品推荐
相关产品推荐

