Беше дълъг ден за мен, опитвайки се да разбера това и вярвам, че винаги има отговор на stackoverflow. Търсих публикации, които са подобни, но предполагам, че никоя няма това, което отчаяно търся. Това е сделката, имам този MVC 4 проект, върху който работя, но се натъкнах на някои проблеми, които ме накараха да го отворя. Използването на IPageList за страниране на моя MVC е доста готино, но как мога да продължа да странизирам резултата, филтриран с помощта на същия контейнер ActionResult за индекса. Ето код за вечеря.
public ActionResult Index(int? page, int category = 0)
{
int pageSize = 10;
int pageNumber = (page ?? 1);
if (category != 0)
{
var products = (from p in db.Products where p.ProductID == category select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
else
{
var products = (from p in db.Products select p).OrderBy(x => x.ProductName).ToList();
return View(products.ToPagedList(pageNumber, pageSize));
}
}
По принцип категорията int е стойността, получена от падащия списък. Филтрира перфектно, но проблемът е, когато филтрирам и резултатите са по-големи от 10 и се опитам да отида на следващата страница, той се връща към първоначалния резултат на индекса. Отстранявайки грешки, разбрах, че след като се щракне върху next, стойността на int category се изчиства и той влиза в блока else. Ето контролата за пейджинг, може би има нещо, което трябва да се коригира...
<div>Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
of @Model.PageCount
@if (Model.HasPreviousPage)
{
@Html.ActionLink("<<", "Index", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink("< Prev", "Index", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:<<
@Html.Raw(" ");
@:< Prev
}
@if (Model.HasNextPage)
{
@Html.ActionLink("Next >", "Index", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
@Html.Raw(" ");
@Html.ActionLink(">>", "Index", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter=ViewBag.CurrentFilter })
}
else
{
@:Next >
@Html.Raw(" ")
@:>>
}
Това, от което се нуждая, е филтрираните резултати, върнати на страницата, да отговарят на пейджинг. Ще чакам отговори. Благодаря!