【发布时间】:2016-05-30 19:01:29
【问题描述】:
我定义了以下路线以在我的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
可以正常工作并按预期传递参数。
附: Admin 是我的应用程序中的一个定义区域。
这是http://localhost:46813/Admin/MaterialPaymentRequestSbuItem/CreateChild?parentId=2 的路由调试器的输出:
【问题讨论】:
-
您显示的代码工作正常。你是如何生成网址的?
-
@StephenMuecke 我手动生成了上面的 URL 来测试应用程序,但是还有其他测试方法吗?我尝试了 RedirectToAction 和类似的东西,它将以这种模式(
.../CreateChild?parentId=32)创建 URL,例如:@Html.ActionLink("Create New Item", "CreateChild", new { parentId = @ViewBag.ParentID }, null) -
它必须是
@Html.ActionLink("Create New Item", "CreateChild", "MaterialPaymentRequestSbuItem", new { parentId = @ViewBag.ParentID }, null)才能正常工作并生成..../Admin/MaterialPaymentRequestSbuItem/CreateChild/23。如果不是,那么您还没有向我们展示导致问题的其他原因。 -
@StephenMuecke 这是从同一控制器的索引视图带来的,因此不需要添加控制器名称,但是我尝试显式定义控制器,但它没有进行任何更改。
-
你声称它生成
...?parentId=32而不是.../32? (我无法重现)
标签: asp.net-mvc asp.net-mvc-5 url-routing asp.net-mvc-areas