ASP.NET MVC:URL 路由期间未传递参数

ASP.NET MVC: parameter is not passed during URL routing

我在 RouteConfig.cs:

中定义了以下具有友好 url 的路由
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "CreateChildRoute",
    url: "Admin/MaterialPaymentRequestSbuItem/CreateChild/{parentId}",
    defaults: new { controller = "MaterialPaymentRequestSbuItem", action = "CreateChild", parentId = UrlParameter.Optional }
); 
routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    namespaces: new[] {"ProjectManager.Controllers"}

);

然而当我打电话时:http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild/23 空值传递给控制器​​:

public ActionResult CreateChild(int? parentId){
  .....
} 

但是调用 http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild?parentId=32 可以正常工作并按预期传递参数。

P.S。 Admin 是我的应用程序中定义的区域。 这是 http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild?parentId=2 的路由调试器的输出:

据我所见,您的路线 table 看起来是正确的,其中有一个错字,但它似乎自始至终都非常一致,所以我猜这不是问题。

与 teo van kot 所说的相反,您总是希望首先从最具体的路线开始,然后让更一般的路线最后出现,因为只会使用第一个要匹配的路线。

我用来调试路线的一个有用工具是 Route Debugger from Phil Haak. It lets you see what route was chosen and, more usefully which parameters were mapped, and can be installed via NuGet