【问题标题】:How to keep search filter for different Pages in MVC如何在 MVC 中为不同页面保留搜索过滤器
【发布时间】:2021-06-28 09:56:08
【问题描述】:

切换页面时搜索过滤器不断重置。我使用 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 }))

【问题讨论】:

    标签: c# asp.net model-view-controller filter pagedlist


    【解决方案1】:

    使用会话

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

    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

    How to store session data in .NET MVC 5

    【讨论】:

      【解决方案2】:

      请将 ViewData 值分配给文本框。

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

      【讨论】:

        猜你喜欢
        • 2013-09-23
        • 2011-06-25
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 2016-09-26
        • 2023-03-12
        • 1970-01-01
        相关资源
        最近更新 更多