Asp.net mvc MVC4中的过滤器和分页
这对我来说是漫长的一天,我一直在努力解决这个问题,我相信在stackoverflow上总会有答案。我曾搜索过类似的帖子,但我想没有一篇是我拼命寻找的。事情是这样的,我已经完成了我正在进行的MVC4项目,但是我遇到了一些问题,这些问题促使我打开了它。在我的MVC上使用IPageList进行分页非常酷,但是如何使用相同的ActionResult索引容器对过滤后的结果进行分页呢。这里有一些代码可以使用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
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和支持的区域。您能解释一下这有助于解决问题吗?仅仅一个普通代码块并不能提供那么多信息