1

我是 MVC 4 的初学者。我有一个 url ../Home/NameDetailsPage/20其中 controller= Home, action= NameDetailsPage和 pageIndex= 20。我如何为这个 url 编写路由引擎?

routes.MapRoute(
 ......
 .....
);

在控制器中,NameDetailsPage 对于默认页面(例如 int page=2)工作得很好:-

 public ActionResult NameDetailsPage(int? page)
    {

        var context = new BlogContext();
        IQueryable<string> list;
        list = from m in context.Blogs.OrderBy(m => m.BlogId)
               select m.Name;

        ViewBag.total = list.ToArray().Length;
        ViewBag.page = page;

        var pageNumber = page ?? 1;
        ViewBag.page1 = pageNumber;

        return View("NameDetails", list.Skip(pageNumber * 4).Take(4));
    }

但是无论 url 中的 pageIndex 是什么,pageNumber 始终为 1。所以它对所有 pageIndex 显示相同的结果。如何设置 pageNumber 不是 1。在此先感谢。

4

2 回答 2

1

当您有如下路线时

routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
);

默认对象属性(控制器、操作、id)是可以传递给操作的(如果操作具有与名称匹配的参数)。

所以如果你有一个动作:

public ActionResult NameDetailsPage(int? page)

没有从 URL 传递的值作为page.

您可以更改{id}{page},或者最好是:

public ActionResult NameDetailsPage(int? id)
于 2013-09-16T21:10:47.803 回答
0

根据您的评论,您大部分时间都在那里。您只需要定义要传递给操作的参数。在这种情况下,为 {page} 切换 {id} 并更改默认值以适应。

routes.MapRoute( 
    name: "Page", 
    url: "Home/NameDetailsPage/{page}", 
    defaults: new { controller = "Home", action = "NameDetailsPage", page = UrlParameter.Optional } );
于 2013-09-16T21:33:03.553 回答