搜索功能失败了我asp.net mvc

时间:2016-03-21 21:42:39

标签: asp.net-mvc

我正在尝试添加一个简单的搜索框。我没有收到任何错误,我的变量正确填充,但它没有更新查询。这是我的控制器。

    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”,但视图不会更新。我错过了一些明显的东西吗?

1 个答案:

答案 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());

}

可能会出现类型不匹配,然后您可以在每个步骤定义单独的IEnumerableList类型变量,而不是每次都重写用户。