본문 바로가기
ASP.NET MVC

ASP.NET] 게시판 Paging 페이징 만들기

by Fastlane 2021. 12. 21.
728x90
반응형

1. NoticeList.cshtml

    <!-- 페이징:S -->
    <div class="pagination MT15">
        @Html.Raw(PagingManager.Paging(ViewBag.page, ViewBag.totalCount, ViewBag.pageSize, ViewBag.url.ToString()))
    </div>
    <!-- 페이징:E -->

 

 

2. PagingManager.cs

    public static string Paging(int iPageNo, int iRecordCount, int iPageSize, string iUrl)
    {

        string str = "";

        if (iRecordCount > 0)
        {
            string strTotalCount = string.IsNullOrEmpty(string.Format("{0:#,###}", iRecordCount)) ? "0" : string.Format("{0:#,###}", iRecordCount);

            //페이지수 카운트
            int iPageCount = (int)((iRecordCount - 1) / iPageSize) + 1;
            str += "<div class=\"pagination MT25\"><div class=\"FLOATL\"><span class=\"admCmmStit noindent FWB \" style=\"line-height:37px; font-size:12px\">전체 " + strTotalCount + "건</span></div>" + GetPaging(iPageNo, 10, iPageCount) + "</div>";
            str += "<script>";
            str += "function goList(page) {";
            str += $"location.href=\"{iUrl}&page=\"+page;";
            str += "}";
            str += "</script>";
        }

        return str;

    }
    
        private static string GetPaging(int gotoPage, int blockSize, int pageCount)
    {
        string str = "";
        //블럭 페이지 시작값 설정
        int blockPage = (int)((gotoPage - 1) / blockSize) * blockSize + 1;

        // ----- 이전10개 -----
        // 1페이지라면 링크를 안하고 아니라면 10페이지를 뺀 페이지값을 넘긴다. 
        if (blockPage != 1)
        {
            str += "<div class=\"ptp contr dprev\"><a href=\"#\" onclick=\"goList('1')\" class=\"txt\"></a></div>";
            str += "<div class=\"ptp contr prev\"><a href=\"#\" onclick=\"goList('" + (blockPage - 1) + "')\" class=\"txt\"></a></div>";
        }

        // ----- 블럭당 페이지 1~10 숫자 표기 시작 -----
        // 페이지번호를 10개씩 출력하는 소스로 i변수를 카운트시켜 10개이내이면서 마지막페이지까지만 반복시킨다.  
        int i = 1;

        while (i <= blockSize && blockPage <= pageCount)
        {
            if (blockPage == gotoPage)
            {
                str += "<div class=\"ptp active\"><a href=\"#\" class=\"txt\">" + blockPage + "</a></div>";
            }
            else
            {
                str += "<div class=\"ptp\"><a href=\"#\" onclick=\"goList('" + blockPage + "')\" class=\"txt\">" + blockPage + "</a></div>";
            }
            blockPage++;
            i++;
        }

        if (blockPage <= pageCount)
        {
            str += "<div class=\"ptp contr next\"><a href=\"#\" onclick=\"goList('" + blockPage + "')\" class=\"txt\"></a></div>";
            str += "<div class=\"ptp contr dnext\"><a href=\"#\" onclick=\"goList('" + pageCount + "')\" class=\"txt\"></a></div>";
        }

        return str;
    }

3. NoticeController.cs

        public ActionResult NoticeList(int page = 1)
        {
            int pageSize = 10;

            int totalCount = 0;
            IEnumerable<Notice> list = NoticeDA.Get_NoticeList(page, pageSize, out totalCount);

            ViewBag.totalCount = totalCount;
            ViewBag.page = page;
            ViewBag.pageSize = pageSize;
            ViewBag.url = $"/Notice/NoticeList?";

            return View(list);
        }

 

728x90
반응형

댓글