![](/img/trans.png)
[英]How can I bring google-like recrawling in my application(web or console)
[英]How can I modify this to have a Google-like paging?
我的控制器类包含
var Paged = new PaginatedList<Products>(SideBar, page ?? 0, pageSize);
if (Request.IsAjaxRequest())
{
return PartialView("~/Views/Shared/_Grid.cshtml", Paged);
}
return View(Paged);
PaginatedList是
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 0);
}
}
public bool HasNextPage
{
get
{
return (PageIndex + 1 < TotalPages);
}
}
}
我的看法是
<div class="pagination-container">
<nav class="pagination">
<ul>
@for (int i = 0; i < Model.TotalPages; i++)
{
<li><a href="@Url.Action("Index", "Home", new { page = i})"
class="@(i == Model.PageIndex ? "current-page" : "")">@(i + 1)</a></li>
}
</ul>
</nav>
<nav class="pagination-next-prev">
<ul>
@if (Model.HasPreviousPage) {
<li><a href="@Url.Action("Index", "Home", new { page = (Model.PageIndex - 1) })" class="prev"></a></li>
}
@if (Model.HasNextPage) {
<li><a href="@Url.Action("Index", "Home", new { page = (Model.PageIndex + 1) })" class="next"></a></li>
}
</ul>
</nav>
<div>
Page @(Model.PageIndex + 1) of @Model.TotalPages
</div>
</div>
上面的视图的一个问题是,它创建的数字页面等于模型中的页面大小。 如果模型有6页,则结果为
如果我有100个Model.Pages会怎样?
您需要确保分开,而不是返回模型中的所有数据-您最多仅返回页面大小,并具有一个单独的属性来存储总数。
例如:
public class PageResult<T> where T : class
{
public PageResult(IEnumerable<T> items, int page = 1, int pageSize = 10)
{
this.Items = items;
this.PageSize = pageSize;
this.PageIndex = page;
this.PaginateData(page);
}
public IEnumerable<T> Items { get; private set; }
public int PageSize { get; private set; }
public int PageIndex { get; private set; }
public int Total { get; private set; }
public int TotalPages
{
get
{
return Math.Max((int)Math.Ceiling((Total / (double)PageSize)), 1);
}
}
private int _MaxPagesToDisplay = 10;
public int MaxPagesToDisplay
{
get { return _MaxPagesToDisplay; }
set { _MaxPagesToDisplay = value; }
}
public int PagesToDisplay
{
get
{
return Math.Min(this.MaxPagesToDisplay, TotalPages);
}
}
public void PaginateData(int page)
{
if(this.Items == null) return;
this.Total = this.Items.Count();
this.Items = this.Items.Skip(this.PageSize * this.PageIndex - 1).Take(this.PageSize);
}
}
这意味着您可以返回例如100万个结果并将“总计”设置为100万个结果,但是只能在Items集合中插入10个结果。 您可以使用Linq将数据分页到该集合中 。 我添加了为您执行此操作的方法PaginateData。
然后,您可以更新视图:
@for (int i = 1; i <= Model.PagesToDisplay; i++)
{
<li><a href="@Url.Action("Index", "Home", new { page = i})"
class="@(i == Model.PageIndex ? "current-page" : "")">@(i)</a></li>
}
然后,您可以使用总计字段在页面上显示总数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.