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
我在 RouteConfig.cs
:
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