如何设置路由在asp.net MVC3应用程序分页

问题描述:

我已经设置了简单的寻呼系统在我的应用程序,使用来自的NerdDinner教程的理念,采用分页列表类:如何设置路由在asp.net MVC3应用程序分页

public class PaginatedList<T> : List<T> { 
     public int PageIndex {} 
     public int PageSize {} 
     public int TotalCount {} 
     public int TotalPages {} 

     public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize){} 

     public bool HasPreviousPage {} 

     public bool HasNextPage {} } 

分页工作,我用它来得到通过LINQ2SQL数据库中的长条桌,在此控制器操作:

public ActionResult Index(int page=0) 
    { 
     const int pageSize = 10; 

     var source = repo.SvaMjesta(); 
     var paginatedList = new PaginatedList<Mjesto>(source, page, pageSize); 

     return View(paginatedList); 
    } 

分页工作正常,我可以为我使用的查询类型得到任何页面,只要o URL:/Admin/Mjesta?page = 2
这事情我想避免的,并想用简单的URL,如:/管理/ Mjesta /页/ 2

要为此我在AdminAreaRegistration.cs做出此项

 context.MapRoute(
      "pMjesta", 
      "Admin/Mjesta/Page/{page}", 
      new {controller = "Mjesta", action = "Index"}); 

但是,当我尝试访问URL如/Admin/Mjesta/Page/2,它仍然会引发404错误。

我的想法是首先在MapRouting中创建一些通用的分页条目,这样我就可以使用相同的分部视图来呈现每个列表的分页控件,但是由于我无法使其工作我试过这个更具体的方法,但我仍然无法让控制器对这个URL请求做出反应。

任何想法和/或建议吗?

+0

此外,如果有的话1可以推荐在哪里寻找更优雅的解决方案来添加不使用JS的分页和排序,但使用查询字符串来保存值。 – Zaak 2011-05-01 11:16:15

您还有该地区的其他路线,该网址可以匹配?

举例来说,如果你仍然有默认的区域路线:

context.MapRoute(
    "DefaultAreaRoute", 
    "Admin/{controller}/{action}/{id}", 
    new { controller = "Home", action = "Index", id = Url.Optional }); 

,这是你的新航线上市之前,您的首选网址将匹配以及第一次使用这条路线。

+0

这是问题的解决方案,默认路由实际上与分页URL相匹配。 – Zaak 2011-04-30 17:16:57

context.MapRoute(
     "pMjesta", 
     "Admin/Mjesta/Page/{page}", 
     new {controller = "Mjesta", action = "Index", page = "{page}"});