如何在 MVC 中保留不同页面的搜索过滤器

How to keep search filter for different Pages in MVC

搜索过滤器在切换页面时不断重置。我使用 Viewdata 来存储字符串。我应该改用 Viewbag 吗?

控制器:

        public ActionResult Index(int page = 1, int pageSize = 20, string searchString = "")
        {
            var reiseDao = new ReisenDao();
            var model = reiseDao.ListMitarbeiters(page, pageSize);

            ViewData["CurrentFilter"] = searchString;
            var persons = from p in _db.Person
                          select p;
            persons = persons.Where(s => s.Status == true);

            if (!String.IsNullOrEmpty(searchString))
            {
                persons = persons.Where(s => s.Name.Contains(searchString)
                                        || s.Vorname.Contains(searchString)
                                        || s.Kostenstelle.ToString().Contains(searchString));
            }

            return View(persons.ToPagedList(page, pageSize));

        }

观点:

                @using (Html.BeginForm())
                {
                    <p>
                        @Html.TextBox("searchString")
                        <button class="icon"><i class="fa fa-search"></i></button>
                    </p>
                }
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))

请将 ViewData 值分配给文本框。

@using (Html.BeginForm())
{
    <p>
        @Html.TextBox("searchString", ViewData["CurrentFilter"])
        <button class="icon"><i class="fa fa-search"></i></button>
    </p>
}

使用会话

会话是一种状态管理技术。 Session 可以将值存储在服务器上。它可以支持任何类型的对象与我们自己的自定义对象一起存储。会话是状态管理的最佳技术之一,因为它将数据存储为基于客户端的,换句话说,数据是为每个用户单独存储的,而且数据是安全的,因为它在服务器上。

public ActionResult Index(int page = 1, int pageSize = 20, string searchString = "")
{
    var reiseDao = new ReisenDao();
    var model = reiseDao.ListMitarbeiters(page, pageSize);

    Session("CurrentFilter") = searchString;
    var persons = from p in _db.Person
                  select p;
    persons = persons.Where(s => s.Status == true);

    if (!String.IsNullOrEmpty(searchString))
    {
        persons = persons.Where(s => s.Name.Contains(searchString)
                                || s.Vorname.Contains(searchString)
                                || s.Kostenstelle.ToString().Contains(searchString));
    }

    return View(persons.ToPagedList(page, pageSize));
}

然后在整个项目中使用Session["CurrentFilter"].ToString()获取数据

有关详细信息,请查看 Microsoft 文档: ASP.NET Session