【发布时间】:2018-05-25 17:05:07
【问题描述】:
我实现了一个基本的排序——用排序过滤
控制器中的索引代码
public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
{
ViewBag.CurrentSort = sortOrder;
ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
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: // Name ascending
students = students.OrderBy(s => s.LastName);
break;
}
int pageSize = 3;
int pageNumber = (page ?? 1);
return View(students.ToPagedList(pageNumber, pageSize));
}
我要问的是,是否有任何方法可以实现相同的代码,而无需向最终用户显示查询参数,如图所示。
是否可以使用视图模型之类的东西隐藏此参数 - 表单集合或使用基于路由 - 是否存在与使用查询字符串的这种工作方式相关的安全性问题 - 请注意,此示例只是我想使用 contoso 大学 (Microsoft 演示) 做的演示,并且可以肯定在此上下文中我不需要隐藏查询字符串,但在另一个上下文中 (使用 ado.net 存储过程) 可以展示一些数据库架构——
【问题讨论】:
-
你有没有想过使用带字符串的模型活页夹?
-
您可以考虑在页面加载后通过 jQuery 删除查询字符串的多余部分
-
如果有任何 sn-p 或代码可以遵循,这将是一个很好的起点,谢谢
-
您到底为什么要“隐藏”它?用户在文本框中输入了 "a",因此他们希望它出现在查询字符串中
-
在另一个上下文中(使用 ado.net 存储过程)可以展示一些数据库架构
标签: c# asp.net-mvc search query-string querystringparameter