using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Text;
using System.Data.Linq;
namespace CustomNamespace
{
public static class PageHelpers
{
public class PageObject<R>
{
public List<R> List { get; set; }
public int TotalCount { get; set; }
public string LinkTags { get; set; }
}
public static PageObject<R> GetPageObject<T, R>(this HtmlHelper html, int currentPage, int pageRange, Func<int, string> pageUrl, IQueryable<T> table, Func<T, bool> where, Func<T, R> select) where T : class
{
PageObject<R> pageObject = new PageObject<R>();
pageObject.List =
table
.Where(where)
.Select(select)
.Skip(currentPage * pageRange)
.Take(pageRange)
.ToList();
pageObject.TotalCount =
table
.Where(where)
.Select(select)
.Count();
pageObject.LinkTags = PageLinkTag(null, currentPage, pageObject.TotalCount, pageRange, pageUrl);
return pageObject;
}
public static string PageLinkTag(this HtmlHelper html, int currentPage, int totalCount, int pageRange, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();
int totalPages = (int)(totalCount / pageRange);
if (totalCount % pageRange != 0)
{
totalPages++;
}
for (int i = 1; i <= totalPages; ++i)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
tag.AddCssClass("selected");
result.AppendLine(tag.ToString());
}
return result.ToString();
}
}
}
- 사용법
ViewBag.PageObject =
((HtmlHelper)null)
.GetPageObject</*원천 데이터형*/, /*변환 데이터형*/>(
/* page 넘버 */,
/* 한page당 보여지는 갯수 */,
(i =>/* 링크 스트링 */)),
/*IQueryable<원천 데이터형> Object*/,
(x =>
/* where 조건들. */
),
(_x => /* select 변환 */)
);
- 예제
public class NameBook
{
public string FirstName{get;set;}
public string LastName{get;set;}
}
.......
List<string> fullNames = new List<string>(){"dk.hyun","zerry.hyun","ck.lim","jw.park"};
ViewBag.PageObject =
((HtmlHelper)null)
.GetPageObject<String,NameBook>(
0,
2,
(i => Url.Action("NameBookList", new { pageNo = i-1 })),
fullNames,
(x => true),
(_x => new NameBook(){
FirstName = _x.split('.')[0],
LastName = _x.split(',')[1]
})
);
.....
<Output>
PageObject.List =>[{FirstName = "dk", LastName = "hyun"},{FirstName = "zerry", LastName = "hyun"}]
PageObject.TotalCount=>2
PageObject.LinkTags =>
<a href="/NameBookList?pageNo=0" class="selected">1</a>
<a href="/NameBookList?pageNo=0" class="selected">2</a>
