asp.net MVC 4中的路由问题

时间:2013-09-16 21:02:42

标签: asp.net asp.net-mvc-4 asp.net-mvc-routing

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

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));
    }

但是pageNumber总是1,无论url中的pageIndex是什么。所以它为所有pageIndex显示相同的结果。如何设置除1之外的pageNumber。先谢谢。

2 个答案:

答案 0 :(得分:1)

当你有如下路线时

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

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

所以如果你有一个动作:

public ActionResult NameDetailsPage(int? page)

没有值作为page从网址传递。

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

public ActionResult NameDetailsPage(int? id)

答案 1 :(得分:0)

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

routes.MapRoute( 
    name: "Page", 
    url: "Home/NameDetailsPage/{page}", 
    defaults: new { controller = "Home", action = "NameDetailsPage", page = UrlParameter.Optional } );