我正在尝试添加一个简单的搜索框。我没有收到任何错误,我的变量正确填充,但它没有更新查询。这是我的控制器。
public ActionResult Index(string sortOrder, string searchString)
{
ViewBag.LastNameSortParm = String.IsNullOrEmpty(sortOrder) ? "lastname_desc" : "";
ViewBag.FirstNameSortParm = sortOrder == "firstname" ? "firstname_desc" : "firstname";
var users = from u in UserManager.Users
select u;
if (!String.IsNullOrEmpty(searchString))
{
users = UserManager.Users.Where(u => u.LastName.Contains(searchString));
//|| u.FirstName.Contains(searchString));
}
switch (sortOrder)
{
case "lastname_desc":
users = UserManager.Users.OrderByDescending(u => u.LastName);
break;
case "firstname":
users = UserManager.Users.OrderBy(u => u.LastName);
break;
case "firstname_desc":
users = UserManager.Users.OrderByDescending(u => u.LastName);
break;
default:
users = UserManager.Users.OrderBy(u => u.LastName);
break;
}
return View(users.ToList());
}
在我看来,我有这个。
@using (Html.BeginForm())
{
<p>
Find by name: @Html.TextBox("SearchString")
<input type="submit" value="Search" />
</p>
}
我在applicationuser模型中有一个LastName字段,如果我有一个姓氏Smith并且我输入S,则searchString在调试时填充“S”,但视图不会更新。我错过了一些明显的东西吗?
答案 0 :(得分:2)
尝试处理排序顺序的最后一个switch语句将user
设置为每个分支的新值。 user
的所有高级作业都将丢失,包括过滤您的用户的作业:
users = UserManager.Users.Where(u => u.LastName.Contains(searchString));
您应该只使用UserManager.Users
一次。由于我们没有看到排序顺序,或者您的对象类型完全无法提供确切的解决方案,但是这样的方法可能有效:
public ActionResult Index(string sortOrder, string searchString)
{
ViewBag.LastNameSortParm = String.IsNullOrEmpty(sortOrder) ? "lastname_desc" : "";
ViewBag.FirstNameSortParm = sortOrder == "firstname" ? "firstname_desc" : "firstname";
var users = from u in UserManager.Users
select u;
if (!String.IsNullOrEmpty(searchString))
{
users = users.Where(u => u.LastName.Contains(searchString));
}
switch (sortOrder)
{
case "lastname_desc":
users = users.OrderByDescending(u => u.LastName);
break;
case "firstname":
users = users.OrderBy(u => u.LastName);
break;
case "firstname_desc":
users = users.OrderByDescending(u => u.LastName);
break;
default:
users = users.OrderBy(u => u.LastName);
break;
}
return View(users.ToList());
}
可能会出现类型不匹配,然后您可以在每个步骤定义单独的IEnumerable
或List
类型变量,而不是每次都重写用户。