使用 PagedList 对产品列表进行分页
Using PagedList for paginating product list
我正在尝试显示产品列表并显示分页。所以,我决定使用 PagedList 插件。我在下面的 link 中阅读了一些有关如何修改控制器和视图的示例。
https://github.com/TroyGoode/PagedList
但是,我没有使用 ViewBag,而是通过对控制器进行一些修改,设法将一组产品发送到控制器:
public ActionResult Index(string name)
{
IEnumerable<ProductModel> productList = new HashSet<ProductModel>();
if (string.IsNullOrWhiteSpace(name))
{
}
else
{
CategoryModel category = db.Categories.Where(x => x.CategorytUrl == name).FirstOrDefault();
if (category != null)
{
int catId = category.Id;
string catName = category.Name;
ViewBag.categoryName = category.Name;
List<SpecItemsModel> options = Products.GetFilter(category.Id);
//initialize the list
//productList = Products.ProductLists(catId);
ViewBag.filters = options;
var childrenIDs = db.Categories.Where(x => x.ParentId == category.Id).Select(x => x.Id);
var grandchildrenIDs = db.Categories.Where(x => childrenIDs.Contains((int)x.ParentId)).Select(x => x.Id);
List<int> catIds = new List<int>();
catIds.Add(category.Id);
catIds.AddRange(childrenIDs);
catIds.AddRange(grandchildrenIDs);
var templates = db.ProductTemplates.Where(t => catIds.Contains(t.CategoryId)).Select(x => x.Id);
productList = db.Products.Where(p => templates.Contains(p.ProductTemplateId));
}
}
var pageNumber = page ?? 1;
//var onePageOfProducts = productList.OrderBy(i => i.AdminRate).ToPagedList(pageNumber, 2);
//ViewBag.OnePageOfProducts = onePageOfProducts;
return View(productList.OrderBy(i => i.AdminRate).ToPagedList(pageNumber, 2));
}
因此,产品以 2 个产品组的形式显示在他的视图中。我唯一不知道的是如何修改我提到的示例的 html pager 以显示分页控件。 :
@model IEnumerable<fardashahr.Models.ProductModel>
<div class="col-md-9">
@foreach (var item in Model)
{
<a href="@Url.Action("Details","Home",new { name = item.ProductUrl })">
<img class="bd-placeholder-img card-img-top mw-100" src="/Images/Uploads/Products/@item.Id/Thumbs/@item.ImageName" />
</a>
<p class="card-text">
<h3>
@item.ShortName
</h3>
</p>
}
</div>
</div>
有什么建议吗?
抱歉,我没有查看您发布的 github 项目。
在控制器中
改变
public ActionResult Index(string name)
到
public ActionResult Index(int page, string name)
在视图中
使用
@Html.PagedListPager( (IPagedList)Model, page => Url.Action("Index", new { page = page, name = "***" }) )
显示页面导航器。
我正在尝试显示产品列表并显示分页。所以,我决定使用 PagedList 插件。我在下面的 link 中阅读了一些有关如何修改控制器和视图的示例。 https://github.com/TroyGoode/PagedList
但是,我没有使用 ViewBag,而是通过对控制器进行一些修改,设法将一组产品发送到控制器:
public ActionResult Index(string name)
{
IEnumerable<ProductModel> productList = new HashSet<ProductModel>();
if (string.IsNullOrWhiteSpace(name))
{
}
else
{
CategoryModel category = db.Categories.Where(x => x.CategorytUrl == name).FirstOrDefault();
if (category != null)
{
int catId = category.Id;
string catName = category.Name;
ViewBag.categoryName = category.Name;
List<SpecItemsModel> options = Products.GetFilter(category.Id);
//initialize the list
//productList = Products.ProductLists(catId);
ViewBag.filters = options;
var childrenIDs = db.Categories.Where(x => x.ParentId == category.Id).Select(x => x.Id);
var grandchildrenIDs = db.Categories.Where(x => childrenIDs.Contains((int)x.ParentId)).Select(x => x.Id);
List<int> catIds = new List<int>();
catIds.Add(category.Id);
catIds.AddRange(childrenIDs);
catIds.AddRange(grandchildrenIDs);
var templates = db.ProductTemplates.Where(t => catIds.Contains(t.CategoryId)).Select(x => x.Id);
productList = db.Products.Where(p => templates.Contains(p.ProductTemplateId));
}
}
var pageNumber = page ?? 1;
//var onePageOfProducts = productList.OrderBy(i => i.AdminRate).ToPagedList(pageNumber, 2);
//ViewBag.OnePageOfProducts = onePageOfProducts;
return View(productList.OrderBy(i => i.AdminRate).ToPagedList(pageNumber, 2));
}
因此,产品以 2 个产品组的形式显示在他的视图中。我唯一不知道的是如何修改我提到的示例的 html pager 以显示分页控件。 :
@model IEnumerable<fardashahr.Models.ProductModel>
<div class="col-md-9">
@foreach (var item in Model)
{
<a href="@Url.Action("Details","Home",new { name = item.ProductUrl })">
<img class="bd-placeholder-img card-img-top mw-100" src="/Images/Uploads/Products/@item.Id/Thumbs/@item.ImageName" />
</a>
<p class="card-text">
<h3>
@item.ShortName
</h3>
</p>
}
</div>
</div>
有什么建议吗?
抱歉,我没有查看您发布的 github 项目。
在控制器中
改变
public ActionResult Index(string name)
到
public ActionResult Index(int page, string name)
在视图中
使用
@Html.PagedListPager( (IPagedList)Model, page => Url.Action("Index", new { page = page, name = "***" }) )
显示页面导航器。