问题描述: 在使用Asp .Net Core的X-PagedList库时,遇到了省略号问题。
解决方法: 省略号问题通常是由于分页控件在生成分页链接时,没有正确处理省略号的情况导致的。这个问题可以通过自定义分页控件的生成逻辑来解决。
以下是一个解决省略号问题的示例代码:
using X.PagedList.Mvc.Core;
using X.PagedList;
public static class PagedListExtensions
{
public static string PageLinks(this IHtmlHelper htmlHelper, IPagedList pagedList, Func pageUrl)
{
var htmlString = new HtmlString("");
if (pagedList.PageCount > 1)
{
var ulTag = new TagBuilder("ul");
ulTag.AddCssClass("pagination");
var liTag = new TagBuilder("li");
liTag.AddCssClass("page-item");
var aTag = new TagBuilder("a");
aTag.AddCssClass("page-link");
// Add Previous link
if (pagedList.HasPreviousPage)
{
aTag.Attributes["href"] = pageUrl(pagedList.PageNumber - 1);
aTag.InnerHtml.Append("Previous");
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
// Add First page link
if (pagedList.PageNumber > 1)
{
aTag.Attributes["href"] = pageUrl(1);
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append("1");
liTag.InnerHtml.Clear();
liTag.AddCssClass("disabled");
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
if (pagedList.PageNumber > 3)
{
aTag.Attributes["href"] = "#";
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append("...");
liTag.InnerHtml.Clear();
liTag.AddCssClass("disabled");
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
}
// Add Current page link
for (int i = pagedList.PageNumber - 2; i <= pagedList.PageNumber + 2; i++)
{
if (i > 0 && i <= pagedList.PageCount)
{
liTag.InnerHtml.Clear();
if (i == pagedList.PageNumber)
{
liTag.AddCssClass("active");
}
else
{
aTag.Attributes["href"] = pageUrl(i);
}
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append(i.ToString());
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
}
// Add Last page link
if (pagedList.PageNumber < pagedList.PageCount)
{
if (pagedList.PageNumber < pagedList.PageCount - 2)
{
aTag.Attributes["href"] = "#";
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append("...");
liTag.InnerHtml.Clear();
liTag.AddCssClass("disabled");
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
aTag.Attributes["href"] = pageUrl(pagedList.PageCount);
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append(pagedList.PageCount.ToString());
liTag.InnerHtml.Clear();
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
// Add Next link
if (pagedList.HasNextPage)
{
aTag.Attributes["href"] = pageUrl(pagedList.PageNumber + 1);
aTag.InnerHtml.Clear();
aTag.InnerHtml.Append("Next");
liTag.InnerHtml.Clear();
liTag.InnerHtml.AppendHtml(aTag);
ulTag.InnerHtml.AppendHtml(liTag);
}
htmlString = new HtmlString(ulTag.ToString());
}
return htmlString.ToString();
}
}
在上述代码中,我们通过自定义PageLinks
扩展方法来生成分页链接。该方法接受一个IPagedList
对象和一个Func
类型的pageUrl
参数,用于生成每个分页链接的URL。
在生成分页链接时,我们首先判断是否有前一页和后一页,如果有则生成对应的链接。然后判断当前页码是否大于1,如果是则生成第一页链接,并添加省略