我定义了一条新路线(见下文)。当我启动应用程序时,默认情况下我想:
当我使用这个配置时,我从Home / Index开始就可以,但是/ Customer / Detail / MyCode一直给出一个空值。
如果我反转routes.MapRoute,我有:
有什么想法吗?
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 }
);
答案 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