【问题标题】:Routing issues in asp.net MVC 4asp.net MVC 4 中的路由问题
【发布时间】:2013-09-16 21:02:42
【问题描述】:

我是 MVC 4 的初学者。我有一个网址 ../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。在此先感谢。

【问题讨论】:

  • 你试过什么路由?您发现什么与您的预期不同?
  • routes.MapRoute( name: "Page", url: "Home/NameDetailsPage/{id}", 默认值: new { controller = "Home", action = "NameDetailsPage", id = UrlParameter。可选 } );

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


【解决方案1】:

当你有如下路线时

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

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

所以如果你有一个动作:

public ActionResult NameDetailsPage(int? page)

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

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

public ActionResult NameDetailsPage(int? id)

【讨论】:

  • 是的,我知道了。非常感谢@erik
【解决方案2】:

根据您的评论,您已经成功了。您只需要定义要传递给操作的参数。在这种情况下,为 {page} 切换 {id} 并更改默认值以适合。

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

【讨论】:

  • 感谢布伦特的简单解释。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
  • 2011-11-30
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多