如何在分页时为其他页面保留搜索词
问题描述:
我正在使用分页方法来显示从我的数据库返回的搜索结果。 我为每个额外页面创建一个Html.ActionLink,我想知道的是,如何将搜索到的字符串放入ActionLink?以下是我的部分观点的一部分,我正在填写一个div。它在结果之后,以便用户可以选择另一页结果。如何在分页时为其他页面保留搜索词
<% if (Model.HasNextPage)
{ %>
<% for (var i = 1; i < Model.TotalPages; i++)
{ %>
<%= Html.ActionLink(i.ToString(), "MyPartialPage", "MyController", new { searchString = Cache[searchString], page = i }, new { @id = "SearchResults" })%>
<% } %>
<% } %>
myController的样子:
public ActionResult SearchResults(string searchString, int? page)
{
var theResults = driverRepository.GetResults();
var searchResults = drivers.Where(q => q.Filename.Contains(searchString));
var paginatedDrivers = new PaginatedList<Driver>(searchResults, page ?? 0, pageSize);
return View("SearchResults", paginatedDrivers);
}
有一个文本框和按钮。用户键入搜索并按下按钮,该按钮触发一些JavaScript,从文本框中获取文本并相应地发布到SearchResults。
我想保留他们搜索的内容,所以当我构建ActionLink时,搜索参数仍然存在。
答
我最终什么事做了,增加了参数来我PaginatedList类,它包含搜索字符串,然后设置我的搜索字符串中的ActionResult到model.seachString,像这样:
<% if (Model.HasNextPage)
{ %>
<% for (var i = 1; i < Model.TotalPages; i++)
{ %>
<%= Html.ActionLink(i.ToString(), "MyPartialPage", "MyController", new { searchString = this.Model.SearchString, page = i }, new { @id = "SearchResults" })%>
<% } %>
<% } %>
和我的控制器貌似
public ActionResult SearchResults(string searchString, int? page)
{
var theResults = driverRepository.GetResults();
var searchResults = drivers.Where(q => q.Filename.Contains(searchString));
var paginatedDrivers = new PaginatedList<Driver>(searchString, searchResults, page ?? 0, pageSize);
return View("SearchResults", paginatedDrivers);
}
答
您可以将寻呼机链接放在包含搜索框的同一表单中,并用提交或图像按钮替换它们。
看看这个提问/回答:http://*.com/questions/1663616/paging-search-results-with-asp-net-mvc/1664269#1664269 – Omar 2010-02-26 14:28:20
缓存的东西我会喜欢做,但我确实有问题。为了缓存起作用,我需要为每个searchString创建一个唯一的键,直到我看到我的视图的HasNextPage部分,这会创建actionlink。由于actionlink需要传递searchString参数,因此我将使用搜索的链接进行链接。我如何获得这个密钥? – Darcy 2010-02-26 16:57:11