c# - PagedList 在第二页上丢失搜索过滤器

标签 c# asp.net asp.net-mvc entity-framework pagedlist

我正在使用 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application 中的示例实现一个简单的分页列表索引

我的问题是,当我翻到第二页时,搜索字符串“丢失”了,所以我看到的不是经过筛选的结果集,而是所有记录。

我的 index.cshtml:

@using (Html.BeginForm("Index", "", FormMethod.Get))
{
    <p>
        @Html.TextBox("searchString", ViewBag.currentFilter as string, new { @placeholder = "Search by title or author" })
        <input type="submit" value="Search" />
    </p>
}

@if (Model.PageCount > 1)
{ 
    @Html.PagedListPager( Model, page => Url.Action("Index", new { page }) )
}

我的 Controller :

public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
    {
        ViewBag.TitleSortParm = sortOrder == "Title" ? "Title desc" : "Title";
        ViewBag.AuthorSortParm = sortOrder == "Author" ? "Author desc" : "Author";
        ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date";

        if (searchString != null)
        {
            page = 1;
        }
        else
        {
            searchString = currentFilter;

        }

        ViewBag.currentFilter = searchString;

        var Articles = from a in db.Articles
                       select a;
        if (!String.IsNullOrEmpty(searchString))
        {
            //page = 1;
            Insights = Articles.Where(s => s.Title.ToUpper().Contains(searchString.ToUpper())
                               || s.Author.ToUpper().Contains(searchString.ToUpper()));
        }

        switch (sortOrder)
        {
            case "Author":
                Insights = Articles.OrderBy(s => s.Author);
                break;
            case "Author desc":
                Insights = Articles.OrderByDescending(s => s.Author);
                break;
            case "Title":
                Insights = Articles.OrderBy(s => s.Title);
                break;
            case "Title desc":
                Insights = Articles.OrderByDescending(s => s.Title);
                break;
            case "Date":
                Insights = Articles.OrderBy(s => s.DatePublished);
                break;
            default:
                Insights = Articles.OrderByDescending(s => s.DatePublished);
                break;
        }
        int pageSize = 3;
        int pageNumber = (page ?? 1);
        return View(Articles.ToPagedList(pageNumber, pageSize));

    }

当我以第 2 页为例,我所有的变量,sortOrder、currentFilter 和 searchString 都是空的。

罗比

最佳答案

问题是您的 PagedList 条目不包括您的排序顺序或当前过滤器。

除了按照 Vasanth 的建议添加 ViewBag.CurrentSort 之外,您还需要将 PagedListPager 更改为:

@Html.PagedListPager( Model, page => Url.Action("Index", new { page, currentFilter=ViewBag.CurrentFilter, sortOrder = ViewBag.sortOrder}) )

关于c# - PagedList 在第二页上丢失搜索过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18721249/

相关文章:

javascript - 服务器端重定向后未检测到 AngularJS ui-router 状态

c# - Entity Framework 是否能够与具有未知表结构的其他数据库进行交互?

javascript - 如果要在 ASP.NET MVC 5 中覆盖数据库行,如何向用户显示弹出窗口或警告

c# - ASP.NET 和中间人

asp.net - 永远不想在 Highcharts 上隐藏工具提示

c# - 如何防止验证器在 HttpGet 上运行?

c# - boolean 类型

c# - DateTime 对象 Entity Framework 上的动态 LINQ OrderBy 日期

c# - 从后面的代码修改一个 HTML 标签级别的 CSS 选择器

ASP.NET MVC 2.0 - RenderPartial 和 RenderAction 之间的区别