1.定义实体类
namespace AjaxPaging.Models { public class Person { public int PersonId { get; set; } public string Forename { get; set; } public string Surname { get; set; } public string Country { get; set; } } }
2.有了实体类后,接着需要定义分页类,需要包含的属性有总页数,当前页数以及当前页显示的数据,当然完全可以继承此类,再添加其他的你所需要的属性。
namespace AjaxPaging.Helpers { public class PagedData<T> where T : class { public IEnumerable<T> Data { get; set; } public int NumberOfPages { get; set; } public int CurrentPage { get; set; } } }
3.有了实体类后,接着定义数据访问接口,用于获取数据。
namespace AjaxPaging.Data { interface IPersonDataContext { IEnumerable<Person> GetPerson(); } }
namespace AjaxPaging.Data { public class PersonDataContext : IPersonDataContext { public IEnumerable<Person> GetPerson() { var person = new List<Person>(); person.Add(new Person() { PersonId = 1, Forename = "Paul", Surname = "Huang", Country = "ShenZhen"}); person.Add(new Person() { PersonId = 2, Forename = "James", Surname = "Wong", Country = "ShenZhen" }); person.Add(new Person() { PersonId = 3, Forename = "Tommy", Surname = "Li", Country = "Beijing" }); person.Add(new Person() { PersonId = 4, Forename = "Julia", Surname = "Huang", Country = "ShenZhen" }); person.Add(new Person() { PersonId = 5, Forename = "Hebe", Surname = "Huang", Country = "ShenZhen" }); person.Add(new Person() { PersonId = 6, Forename = "Sky", Surname = "Huang", Country = "GuangZhou" }); person.Add(new Person() { PersonId = 7, Forename = "Blue", Surname = "Huang", Country = "ShenZhen" }); person.Add(new Person() { PersonId = 8, Forename = "Daisy", Surname = "Huang", Country = "Beijing" }); person.Add(new Person() { PersonId = 9, Forename = "Hoily", Surname = "Huang", Country = "GuangZhou" }); person.Add(new Person() { PersonId = 10, Forename = "Ricky", Surname = "Huang", Country = "ShenZhen" }); person.Add(new Person() { PersonId = 11, Forename = "Bill", Surname = "Huang", Country = "Beijing" }); person.Add(new Person() { PersonId = 12, Forename = "Jason", Surname = "Huang", Country = "ShenZhen" }); return person; } } }
4.定义Controller,定义两个Action,一个用于返回默认的主页面,另一个用于查找特定页数的数据并返回View。
namespace AjaxPaging.Controllers { public class HomeController : Controller { #region Field private const int PageSize = 5; private readonly IPersonDataContext _dataContext = new PersonDataContext(); #endregion #region Action public ActionResult Index() { var people = new PagedData<Person>(); List<Person> persons = _dataContext.GetPerson().ToList(); people.Data = persons.OrderBy(p => p.Surname).Take(PageSize).ToList(); people.NumberOfPages = Convert.ToInt32(Math.Ceiling((double)persons.Count() / PageSize)); people.CurrentPage = 1; return View(people); } /// <summary> /// 用于返回包含特定页码数据的部分视图 /// </summary> /// <param name="page"></param> /// <returns></returns> public ActionResult PersonList(int page) { var people = new PagedData<Person>(); List<Person> persons = _dataContext.GetPerson().ToList(); people.Data = persons.OrderBy(p => p.Surname).Skip(PageSize * (page - 1)).Take(PageSize).ToList(); people.NumberOfPages = Convert.ToInt32(Math.Ceiling((double)persons.Count() / PageSize)); people.CurrentPage = page; return PartialView(people); } #endregion } }
5.定义显示数据的部分视图,以便通过Ajax请求数据并返回特定的部分视图
@model AjaxPaging.Helpers.PagedData<AjaxPaging.Models.Person>
<table>
<thead>
<tr>
<th>
Forename
</th>
<th>
Surname
</th>
<th>
Location
</th>
</tr>
</thead>
<tbody>
@foreach (var person in Model.Data)
{
<tr>
<td>
@person.Forename
</td>
<td>
@person.Surname
</td>
<td>
@person.Country
</td>
</tr>
}
</tbody>
<tfoot>
<tr>
<td colspan="3">
@for (int i = 1; i <= Model.NumberOfPages; i++)
{
if (i == Model.CurrentPage)
{
@i
}
else
{
<a class="page-number" href="javascript:void();">@i</a>
}
}
</td>
</tr>
</tfoot>
</table>
6.定义Index页面,当单击page-number时通过Ajax请求数据并刷新页面
@model AjaxPaging.Helpers.PagedData<AjaxPaging.Models.Person> <script type="text/javascript"> $().ready(function () { $(".page-number").live("click", function () { var page = parseInt($(this).html()); $.ajax({ url: '@Url.Action("PersonList")', data: { "page": page }, success: function (data) { $("#person-list").html(data); } }); }); }); </script> @{ ViewBag.Title = "Home Page"; } <div id="person-list"> @Html.Partial("PersonList") </div>
最后的显示效果如下
