如何在分页时保留其他页面的搜索词

时间:2010-02-26 14:25:40

标签: asp.net-mvc search pagination actionlink

我正在使用分页方法来显示从我的数据库返回的搜索结果。 我正在为每个额外页面创建一个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。

我想保留他们搜索的内容,所以当我构建我的ActionLinks时,搜索参数仍然存在。

2 个答案:

答案 0 :(得分:0)

您可以将寻呼机链接放在包含搜索框的同一表单中,并将其替换为提交或图像按钮。

答案 1 :(得分:0)

我最终做的是,在我的PaginatedList类中添加一个包含搜索字符串的参数,然后将actionresult中的searchString设置为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);   
}