在ASP.NET MVC中定义路由

时间:2011-08-15 16:34:22

标签: asp.net-mvc routes

我定义了一条新路线(见下文)。当我启动应用程序时,默认情况下我想:

  • 回家/索引
  • 如果我去/ Customer / Detail / MyCode获取“MyCode”

当我使用这个配置时,我从Home / Index开始就可以,但是/ Customer / Detail / MyCode一直给出一个空值。

如果我反转routes.MapRoute,我有:

  • 默认情况下,我转到/ Customer / Detail,我一直得到mycode值(no null anymoe)
  • 我不是从/ Home / Index
  • 开始的

有什么想法吗?

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

routes.MapRoute(
    "CustomerDetail",
    "{controller}/{action}/{code}",
    new { controller = "Customer", action = "Detail", code = UrlParameter.Optional }
);

1 个答案:

答案 0 :(得分:3)

单一路线就足够了:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{code}", // URL with parameters
    new { controller = "Home", action = "Index", code = UrlParameter.Optional } // Parameter defaults
);

当您请求Home/Index时,这将调用Index上的HomeController操作,并将code参数传递给null,当您请求Customer/Detail/MyCode Detail时1}}动作将在CustomerController上调用并传递code=MyCode

你得到null的原因是你的路由都是等价的,这意味着它们的格式为Controller/Action/SomeCode,这意味着对于两个url,第一个路由匹配,但参数被称为{{1}而不是id所以你得到code。另一种可能性是简单地保留默认路线:

code=null

然后将参数重命名为routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults ); 操作为id:

Detail