3

对我来说,这是漫长的一天,我相信在stackoverflow上总能找到答案。我已经搜索过类似的帖子,但我想没有一个帖子有我迫切需要的东西。这是交易,我正在处理这个MVC 4项目,但我遇到了一些问题,导致我将其打开。在我的 MVC 上使用IPageList进行分页非常酷,但是我怎样才能继续分页使用索引的相同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类别的值就会被清除并进入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(" ")
    @:>>
}

我需要的是页面上返回的过滤结果来响应分页。我会等待答案。谢谢!

4

3 回答 3

4

在Suhas之前给出的答案和评论的帮助下,我能够提出一个更清晰、更好的解决方案。这是最终的解决方案:

public ActionResult Index(int? page, int category = 0)
 {
     int pageSize = 10;
     int pageNumber = (page ?? 1);
     if (category != 0)
     {
         ViewBag.CurrentFilter = category;
         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));
     }
 }

我希望它可以帮助其他人。苏哈斯应得的分数。干杯!

注意:Suhas在这个解决方案下的评论很重要。

于 2012-11-09T01:09:39.227 回答
1

在您的操作容器集中ViewBag.CurrentFilter = category;,假设 CurrentFilter 是类别

于 2012-11-08T23:00:30.960 回答
1
public PartialViewResult AllProducts(int? page, int? currentFilter, int cid = 0)
{
    ViewBag.cid = cid;
    int pageSize = 4;
    int pageIndex = 1;
    pageIndex = page.HasValue ? Convert.ToInt32(page) : 1;
    if (currentFilter != 0 && cid == 0)
    {
        cid = Convert.ToInt32(currentFilter);
    }
    if (cid != 0)
    {
        ViewBag.CurrentFilter = cid;
        ViewBag.AllProducts = _unitOfWork.GetRepositoryInstance<tbl_Products>().GetAllRecordsIQueryable().Where(i => i.IsDelete == false && i.CategoryId == cid).ToList().ToPagedList(pageIndex, pageSize);
        return PartialView("AllProducts", ViewBag.AllProducts);
    }
    else
    {
        ViewBag.AllProducts = _unitOfWork.GetRepositoryInstance<tbl_Products>().GetAllRecordsIQueryable().Where(i => i.IsDelete == false).ToList().ToPagedList(pageIndex, pageSize);
        return PartialView("AllProducts", ViewBag.AllProducts);
    }
}

这是解决这个问题的完美代码。

于 2018-08-13T03:07:06.557 回答