MVC中的页面列表

时间:2015-04-14 00:33:39

标签: c# asp.net-mvc

我在我的MVC应用程序中使用Pagelist。我觉得很棒! 当我尝试在页面内搜索时,它显示当前搜索的页面数量,但是当我单击该特定结果的页面列表的第二页时,显示的页面总数是原始页面数。 为什么这样? 这是我的控制器代码段。

public ActionResult Index(string sortOrder, string currentFilter,int? page, string search, string searchBy)    
        var Users_info = from t in db.Users_info_vw
                              where t.is_active == true                                              select t;
        ViewBag.CurrentSort = sortOrder;
         if(!String.IsNullOrEmpty(search))
        {
            switch (searchBy)
            {
                 case "user":
                    Users_info = Users_info.Where(x => x.Emp_FirstName.Contains(search)|| x.Emp_LastName.Contains(search));
                    break;
                default:
                    Users_info = Users_info.OrderByDescending(x => x.User_id);
                    break;
            }
        ViewBag.CurrentFilter = search;
        int pageSize = 15;
        int pageNumber = (page ?? 1);

        var returnMe = Users_info.ToPagedList(pageNumber, pageSize);
        return View(returnMe);
}

在我看来:

<div class="paging">
    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount
    @Html.PagedListPager(Model, page => Url.Action("Index", 
        new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter }))
</div>

任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

我认为原因是您没有在第二页的控制器中发送正确的参数名称。例如,您在控制器中使用search作为参数名称来搜索数据库中的用户,但是在页面列表绑定时将此值放在currentFilter参数中。

因此,用户currentFilter可以过滤您的用户记录或通过页面列表发送search参数,例如下面:

解决方案1(在控制器中)

Users_info = Users_info.Where(x => x.Emp_FirstName.Contains(currentFilter)
                                || x.Emp_LastName.Contains(currentFilter));

之后不要忘记再次分配ViewBag,例如ViewBag.CurrentFilter = currentFilter;

解决方案2(在视图中)

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

希望这会有所帮助!!