asp. net mvc Custom pager Encapsulation and Optimization

  • 2021-08-21 20:08:41
  • OfStack

Before, I made a general paging component, but there are some shortcomings. From page turning events and paging styles are integrated in the background code, to page turning events can be customized, and then to page turning and style are separated from code. Custom paging pager is easier and easier to expand.

HtmlHelper Pager Extensions

Pager V1.0 :


/// <summary>
  /// Pager V1.0
  /// </summary>
  /// <param name="helper">HtmlHelper</param>
  /// <param name="pager"> Paging information </param>
  /// <returns></returns>
  public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager)
  {
    StringBuilder sbHtmlText = new StringBuilder();
    sbHtmlText.Append("<div style=\"text-align:center\"><nav><ul class=\"pagination\">");
    if (pager.PageIndex <= 1)
    {
      sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a></li>");
    }
    else
    {
      sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData(1)\" aria-label=\"1\"><span aria-hidden=\"true\">&laquo;</span></a></li>", pager.PageIndex - 1);
      sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\">{0}</a></li>", pager.PageIndex - 1);
    }
    sbHtmlText.AppendFormat("<li class=\"active\"><a href=\"javascript:void(0)\">{0}<span class=\"sr-only\">(current)</span></a></li>", pager.PageIndex);
    if (pager.PageIndex >= pager.PageCount)
    {
      sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a></li>");
    }
    else
    {
      sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\">{0}</a></li>", pager.PageIndex + 1);
      sbHtmlText.AppendFormat("<li><a href=\"javascript:loadData({0})\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a></li>", pager.PageIndex + 1);
    }
    sbHtmlText.Append("</ul></nav>");
    sbHtmlText.AppendFormat("<div><span> Each page has <strong>{0}</strong> Data, 1 Shared <strong>{1}</strong> Pages, total <strong>{2}</strong> Bar data </span></div></div>", pager.PageSize, pager.PageCount, pager.TotalCount);
    return MvcHtmlString.Create(sbHtmlText.ToString());
  } 

Pager V2.0


/// <summary>
  /// Pager V2.0
  /// </summary>
  /// <param name="helper">HtmlHelper</param>
  /// <param name="pager"> Paging information </param>
  /// <param name="onPageChange"> Page turning event </param>
  /// <returns></returns>
  public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager, Func<int, string> onPageChange)
  {
    StringBuilder sbHtmlText = new StringBuilder();
    sbHtmlText.Append("<div style=\"text-align:center\"><nav><ul class=\"pagination\">");
    if (pager.PageIndex <= 1)
    {
      sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a></li>");
    }
    else
    {
      sbHtmlText.AppendFormat("<li><a href=\"{0}\" aria-label=\"Previous\"><span aria-hidden=\"true\">&laquo;</span></a></li>", onPageChange(pager.PageIndex - 1));
      sbHtmlText.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", onPageChange(pager.PageIndex - 1), pager.PageIndex - 1);
    }
    sbHtmlText.AppendFormat("<li class=\"active\"><a href=\"javascript:void(0)\">{0}<span class=\"sr-only\">(current)</span></a></li>", pager.PageIndex);
    if (pager.PageIndex >= pager.PageCount)
    {
      sbHtmlText.Append("<li class=\"disabled\"><a href=\"javascript:void(0)\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a></li>");
    }
    else
    {
      sbHtmlText.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", onPageChange(pager.PageIndex + 1), pager.PageIndex + 1);
      sbHtmlText.AppendFormat("<li><a href=\"{0}\" aria-label=\"Next\"><span aria-hidden=\"true\">&raquo;</span></a></li>", onPageChange(pager.PageIndex + 1));
    }
    sbHtmlText.Append("</ul></nav>");
    sbHtmlText.AppendFormat("<div><span> Each page has <strong>{0}</strong> Data, 1 Shared <strong>{1}</strong> Pages, total <strong>{2}</strong> Bar data </span></div></div>", pager.PageSize, pager.PageCount, pager.TotalCount);
    return MvcHtmlString.Create(sbHtmlText.ToString());
  } 

Pager V3.0


/// <summary>
  /// Pager V3.0
  /// </summary>
  /// <param name="helper">HtmlHelper</param>
  /// <param name="pager"> Paging information </param>
  /// <param name="onPageChange"> Page turning address or event </param>
  /// <param name="pagerViewName"> Paging segment view name </param>
  /// <param name="displayMode"> Paged display mode </param>
  /// <returns></returns>
  public static MvcHtmlString Pager(this HtmlHelper helper, PagerModel pager, Func<int, string> onPageChange, string pagerViewName, PagingDisplayMode displayMode = PagingDisplayMode.Always)
  {
    pager.OnPageChange = onPageChange;
    pager.PagingDisplayMode = displayMode;
    return MvcHtmlString.Create(helper.Partial(pagerViewName, pager).ToHtmlString());
  }
 

Summary

Pager V 1.0 Page Style and Page Turn Events must be modified in CSharp code if you want to modify them

Pager V 2.0 can customize the page turning event, but to modify the paging style, you still need to modify the CSharp code

Pager V 3.0 You can modify page turn events or address and paging styles in a custom paging partial view

End

Now that the project MvcSimplePager has been packaged into Nuget http://www.nuget.org/packages/MvcSimplePager/, you can search for MvcSimplePager in VS package manager.

Customize the MvcSimplePager project and sample code: https://github. com/WeihanLi/MvcSimplePager, and you can customize it as needed.


Related articles: