leo*_*ora 2 asp.net asp.net-mvc paging
我有一个asp.net网站,我在其中使用以下代码进行分页:
PagedDataSource objPds = new PagedDataSource
{
DataSource = ds.Tables[0].DefaultView,
AllowPaging = true,
PageSize = 12
};
Run Code Online (Sandbox Code Playgroud)
什么是为asp.net-mvc进行分页的等效最佳方式.我认为这实际上属于视图代码.
小智 11
我只想定义一个带有页码的自定义路线:
routes.MapRoute(
"Books", // Route name
"books/{page}", // URL with parameters
new {controller = "Books", action = "List", page = 1}
);
Run Code Online (Sandbox Code Playgroud)
会给你这种Url:
http://localhost/books/4/
Run Code Online (Sandbox Code Playgroud)
然后在您的控制器操作中,您将获得此页码:
public BooksController
{
public ActionResult List (int page)
{
/* Retrieve records for the requested page from the database */
return View ();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您的视图实际上不会知道当前页面.它只显示提供的记录列表.
您还需要直接在此视图中或在主页面中生成指向各种页面的链接.
在Nerd Dinner项目中有一个很好的分页类示例:
public class PaginatedList<T> : List<T> {
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage {
get {
return (PageIndex > 0);
}
}
public bool HasNextPage {
get {
return (PageIndex+1 < TotalPages);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2502 次 |
| 最近记录: |