Asp.net mvc MVC4中的过滤器和分页

Asp.net mvc MVC4中的过滤器和分页,asp.net-mvc,razor,filter,pagination,asp.net-mvc-4,Asp.net Mvc,Razor,Filter,Pagination,Asp.net Mvc 4,这对我来说是漫长的一天,我一直在努力解决这个问题,我相信在stackoverflow上总会有答案。我曾搜索过类似的帖子,但我想没有一篇是我拼命寻找的。事情是这样的,我已经完成了我正在进行的MVC4项目,但是我遇到了一些问题,这些问题促使我打开了它。在我的MVC上使用IPageList进行分页非常酷,但是如何使用相同的ActionResult索引容器对过滤后的结果进行分页呢。这里有一些代码可以使用 public ActionResult Index(int? page, int category

这对我来说是漫长的一天,我一直在努力解决这个问题,我相信在stackoverflow上总会有答案。我曾搜索过类似的帖子,但我想没有一篇是我拼命寻找的。事情是这样的,我已经完成了我正在进行的MVC4项目,但是我遇到了一些问题,这些问题促使我打开了它。在我的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类别是从dropdownlist获得的值。它过滤得非常完美,但问题是当我过滤结果大于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(" ")
    @:>>
}
Page@(Model.PageCount”,“Index”,新{page=Model.PageCount,sortOrder=ViewBag.CurrentSort,currentFilter=ViewBag.currentFilter})
}
其他的
{
@:下一步>
@Html.Raw(“”)
@:>>
}

我需要的是页面上返回的过滤结果响应分页。我将等待答复。谢谢

在动作容器集合中
ViewBag.CurrentFilter=category假设CurrentFilter是类别

在前面的回答和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值得评分。干杯

注意:Suhas在此解决方案下的评论非常重要。

public PartialViewResult all products(int?page,int?currentFilter,int-cid=0)
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);
    }
}
{ ViewBag.cid=cid; int pageSize=4; int pageIndex=1; pageIndex=page.HasValue?将.ToInt32转换为(第页):1; 如果(currentFilter!=0&&cid==0) { cid=转换为32(电流滤波器); } 如果(cid!=0) { ViewBag.CurrentFilter=cid; ViewBag.AllProducts=\u unitOfWork.GetRepositoryInstance().GetAllRecordsIQueryable().Where(i=>i.IsDelete==false&&i.CategoryId==cid.ToList().ToPagedList(pageIndex,pageSize); 返回PartialView(“所有产品”,ViewBag.AllProducts); } 其他的 { ViewBag.AllProducts=\u unitOfWork.GetRepositoryInstance().GetAllRecordsIQueryable().Where(i=>i.IsDelete==false).ToList().ToPagedList(页面索引,页面大小); 返回PartialView(“所有产品”,ViewBag.AllProducts); } }

以下是解决此问题的完美代码。

不起作用。。。当分页和零被传回CurrentFilterI时,类别丢失值我仍然觉得这是不必要的。如果
category
CategoryFilter
具有相同的值,并且相互分配,则不需要维护这两个变量。只要设置
ViewBag.CurrentFilter=category
并将锚定标记中的查询字符串参数从
CurrentFilter
更改为
category
就可以了。刚刚看到您的评论。。。如果有效,我会编辑我的代码并将你的代码标记为答案。。。干杯尝试使用引导或不使用引导分页设计也有不同的选项,如ItemText、ToolTiptiles、大小、对齐、IsShowControls、ItemIcon、metro css和支持的区域。您能解释一下这有助于解决问题吗?仅仅一个普通代码块并不能提供那么多信息