我在我的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>
任何人都可以帮我这个吗?
答案 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 }))
希望这会有所帮助!!