【发布时间】:2015-04-22 17:14:24
【问题描述】:
我按照以下教程进行排序和搜索:
当我尝试这样做时,排序不起作用。我想对 3 个字段进行排序,username、user_role 和 date_of_register。我的显示的数据未按任何顺序排序(仅显示数据)。 请任何人帮助我我做错了什么。
//controller code:
public ActionResult DisplayUsers(string sortOrder, string searchString)
{
ViewBag.NameSortParm1 = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.NameSortParm2 = String.IsNullOrEmpty(sortOrder) ? "role_desc" : "";
ViewBag.DateSortParm = sortOrder == "Date" ? "date_desc" : "Date";
var users = from a in db.app_user
select a;
switch (sortOrder)
{
case "name_desc":
users = users.OrderByDescending(a => a.username);
break;
case "role_desc":
users = users.OrderBy(a => a.user_role);
break;
case "date_desc":
users = users.OrderBy(a => a.date_of_register);
break;
default:
users = users.OrderBy(a => a.username);
break;
}
return View(db.app_user.ToList());
}
查看页面
//DisplayUsers.cshtml page
<table class="table">
<thead>
<tr>
<th>
@Html.ActionLink("User Name", "DisplayUsers", new { sortOrder = ViewBag.NameSortParm1 })
</th>
<th>
@Html.ActionLink("User Role", "DisplayUsers", new { sortOrder = ViewBag.NameSortParm2 })
</th>
<th>
@Html.DisplayNameFor(model => model.is_active)
</th>
<th>
@Html.ActionLink("Enrollment Date", "DisplayUsers", new { sortOrder = ViewBag.DateSortParm })
</th>
<th></th>
</tr>
</thead>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.username)
</td>
<td>
@Html.DisplayFor(modelItem => item.user_role)
</td>
<td>
@Html.DisplayFor(modelItem => item.is_active)
</td>
<td>
@Html.DisplayFor(modelItem => item.date_of_register)
</td>
</tr>
}
</table>
当我这样做时:return View(users.ToList());
排序仅基于字段用户名,而不是没有用户角色和注册日期。我无法根据用户角色或注册日期对数据进行排序为什么会这样?
用于搜索: 我尝试搜索用户名和 date_of_register 字段。当我尝试代码时:
if (!String.IsNullOrEmpty(searchString))
{
users = users.Where(a => a.username.Contains(searchString) || a.date_of_register.Contains(searchString));
}
得到错误:
错误 1 实例参数:无法从 'System.DateTime?' 转换到 'System.Linq.IQueryable'
错误 2 'System.DateTime?'不包含定义 “包含”和最佳扩展方法重载 'System.Linq.Queryable.Contains(System.Linq.IQueryable, TSource)' 有一些无效参数
如何在日期字段中进行搜索? 请帮我解决这个问题,我们将不胜感激。
【问题讨论】:
-
我认为你应该返回
users.ToList(),而不是返回原始的无序集合:return View(db.app_user.ToList());这就是你得到无序数据的原因。 -
谢谢你们。我可以对用户名和用户角色进行排序。但无法按注册日期排序。为什么会这样?
-
因为
Contains是一种可应用于字符串对象的方法,但在您的情况下,注册日期的类型为DateTime,因此您需要改用>= <=进行比较。
标签: c# linq asp.net-mvc-4 sorting search