본문 바로가기
개발/.NET

asp.net mvc 확장메서드와 람다식을 이용한 페이징 메서드

by 그저그런보통사람 2010. 2. 20.

html.Action() 의 엔트리에 맞는 url를 반환한다.

대리자에게 페이지번호를 넘겨 위의 url를 받아 html 코드로 포장하여 반환한다.

 

* 사용법

<%= Html.PageLink([현재 페이지 번호], [총 페이지 사이즈],

x => Url.Action(["액션"], new { page = x })

       ) %>

 

람다식 Url.Action() 의 두번째 인자는 익명의 타입으로 page 라는 변수를 전달하는데

이것은 Url.Action() 가 route에 등록된 엔트리 규칙에 부합되는 url를 생성하여 반환한다.

 

* 아래는 구현 코드

 

    public static class ExtensionHelper
    {
        public static string PageLink(this HtmlHelper source,
            int curPage, int totalPages, Func<int, string> pageUrl)
        {  
            const int pageLimit = 10;

            int startPage = ((curPage - 1) / pageLimit) * pageLimit + 1;
            int endPage = startPage + pageLimit - 1;

            if (totalPages < endPage) endPage = totalPages;

            int nextPage = endPage + 1;

            StringBuilder pageBuilder = new StringBuilder();

            if (curPage > 1)
            {
                TagBuilder first = new TagBuilder("a");
                first.MergeAttribute("href", pageUrl(1));
                first.InnerHtml = "처음";
                pageBuilder.AppendLine(first.ToString());
            }
            if (curPage > pageLimit)
            {
                TagBuilder prevTag = new TagBuilder("a");
                prevTag.MergeAttribute("href", pageUrl(startPage - 1));
                prevTag.InnerHtml = "이전";
                pageBuilder.AppendLine(prevTag.ToString());
            }
            for (int i = startPage; i <= endPage; i++)
            {
                TagBuilder tag = new TagBuilder("a");
                tag.MergeAttribute("href", pageUrl(i));
                tag.InnerHtml = i.ToString();
                if (i == curPage)
                    tag.AddCssClass("selected");
                pageBuilder.AppendLine(tag.ToString());
            }

            if (nextPage <= totalPages)
            {
                TagBuilder nextTag = new TagBuilder("a");
                nextTag.MergeAttribute("href", pageUrl(nextPage));
                nextTag.InnerHtml = "다음";
                pageBuilder.AppendLine(nextTag.ToString());
            }

            if (curPage < totalPages)
            {
                TagBuilder lastTag = new TagBuilder("a");
                lastTag.MergeAttribute("href", pageUrl(totalPages));
                lastTag.InnerHtml = "마지막";
                pageBuilder.AppendLine(lastTag.ToString());
            }
            return pageBuilder.ToString();
        }
    }

'개발 > .NET' 카테고리의 다른 글

정규식 기본  (2) 2010.03.06
asp.net mvc admin 섹션 구성방법  (2) 2010.02.22
asp.net mvc 및 기타 web 참조 기술 블로그  (0) 2010.02.17
개발 참고 블로그  (0) 2010.02.09
asp.net mvc 샘플 소스  (0) 2010.02.09