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