• C# MVC的一种高效分页的html方法


    首先创建一个html的扩展方法,这个方法是万能的,可以直接拿到您的项目中使用:

     //主要就是输出分页的超级链接的标签
            //自定义分页Helper扩展
            public static HtmlString ShowPageNavigate(this HtmlHelper htmlHelper, int currentPage, int pageSize, int totalCount)
            {
                var redirectTo = htmlHelper.ViewContext.RequestContext.HttpContext.Request.Url.AbsolutePath;
                pageSize = pageSize == 0 ? 3 : pageSize;
                var totalPages = Math.Max((totalCount + pageSize - 1) / pageSize, 1); //总页数
                var output = new StringBuilder();
                if (totalPages > 1)
                {
                    //if (currentPage != 1)
                    {//处理首页连接
                        output.AppendFormat("<a class='pageLink' href='{0}?pageIndex=1&pageSize={1}'>首页</a> ", redirectTo, pageSize);
                    }
                    if (currentPage > 1)
                    {//处理上一页的连接
                        output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>上一页</a> ", redirectTo, currentPage - 1, pageSize);
                    }
                    else
                    {
                        // output.Append("<span class='pageLink'>上一页</span>");
                    }
    
                    output.Append(" ");
                    int currint = 5;
                    for (int i = 0; i <= 10; i++)
                    {//一共最多显示10个页码,前面5个,后面5个
                        if ((currentPage + i - currint) >= 1 && (currentPage + i - currint) <= totalPages)
                        {
                            if (currint == i)
                            {//当前页处理
                                //output.Append(string.Format("[{0}]", currentPage));
                                output.AppendFormat("<a class='cpb' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage, pageSize, currentPage);
                            }
                            else
                            {//一般页处理
                                output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>{3}</a> ", redirectTo, currentPage + i - currint, pageSize, currentPage + i - currint);
                            }
                        }
                        output.Append(" ");
                    }
                    if (currentPage < totalPages)
                    {//处理下一页的链接
                        output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>下一页</a> ", redirectTo, currentPage + 1, pageSize);
                    }
                    else
                    {
                        //output.Append("<span class='pageLink'>下一页</span>");
                    }
                    output.Append(" ");
                    if (currentPage != totalPages)
                    {
                        output.AppendFormat("<a class='pageLink' href='{0}?pageIndex={1}&pageSize={2}'>末页</a> ", redirectTo, totalPages, pageSize);
                    }
                    output.Append(" ");
                }
                output.AppendFormat("第{0}页 / 共{1}页", currentPage, totalPages);//这个统计加不加都行
    
                return new HtmlString(output.ToString());
            }
    

    如果不知道什么是扩展方法,以及不知道扩展方法如何使用,可以看我的另外一篇文章,

    http://blog.csdn.net/only_yu_yy/article/details/78509091

    然后在视图中调用这个方法

    <div>
        @Html.ShowPageNavigate((int)ViewData["pageIndex"], (int)ViewData["pageSize"], (int)ViewData["totalCount"])
    </div>

    最后一步,在控制器中加入如下代码:
            DataModelContainer dbContainer = new DataModelContainer();
            // GET: User
            public ActionResult Index(int pageIndex = 1,int pageSize=2)
            {
                ViewData["pageIndex"] = pageIndex;
                ViewData["pageSize"] = pageSize;
                ViewData["totalCount"] = dbContainer.User.Count();
                ViewData.Model = dbContainer.User.OrderBy(u=>u.Id).Skip(pageSize*(pageIndex-1)).Take(pageSize).AsEnumerable();
                return View();
            }

    这就可以轻松实现分页效果了。
  • 相关阅读:
    观察者模式(Observer)
    外观模式(三层解耦)
    建造者模式(Builder)
    简单工厂
    单例模式(Winform窗体的实现)
    20180213 字符串spilt方法,字符串打包zip方法
    20180212第一发:Python与Json编码解码举例
    Eclipse插件Fat Jar
    java学习之浅谈多线程4SwingWorker
    Android SDK manager 闪退
  • 原文地址:https://www.cnblogs.com/CoderAyu/p/8490143.html
Copyright © 2020-2023  润新知