我按照教程上的排序和搜索來自:排序和在表中的數據的搜索不工作
當我嘗試這樣做,排序不能正常工作。我想分揀3個字段,用戶名,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));
}
得到的錯誤:
Error 1 Instance argument: cannot convert from 'System.DateTime?' to 'System.Linq.IQueryable'
Error 2 'System.DateTime?' does not contain a definition for 'Contains' and the best extension method overload 'System.Linq.Queryable.Contains(System.Linq.IQueryable, TSource)' has some invalid arguments
我怎樣才能讓搜索的日期字段? 請幫助我,這些任何幫助將不勝感激。
我想你應該返回'users.ToList()',而不是你正在返回原始的無序集合:'返回視圖(db.app_user.To List());'這就是你得到無序數據的原因。 –
謝謝你們。我可以對用戶名和用戶角色進行排序。但不能排序**入學日期**。爲什麼這樣? – user4221591
因爲'Contains'是一種可以應用於String對象的方法,但是在您的情況下,Enrollment Date的類型爲DateTime,所以您需要使用'> = <='來比較它。 –