我有一个“项目”控制器和一个“仪表板”操作,它采用名为“accountID”的参数。
public ActionResult Dashboard(String accountID)
{
return View();
}
我的路线定义如下:
routes.MapRoute(
"ProjectsHome",
"{accountID}/projects",
new { controller = "Projects", action = "Dashboard" }
);
我们的想法是拥有一个像/ 1111 / projects这样的URL,其中1111代表accountID。然后,URL将执行Projects控制器的Dashboard操作。
我面临的问题是@Html.ActionLink("Projects", "Dashboard", "Projects", new { accountID = "1111" }, null)
生成一个像/ Projects / Dashboard?accountID = 1111这样的网址,我期待像/ 1111 / projects
我的解决方法是使用@Url.RouteUrl("ProjectsHome", new { accountID = "1111"})
,但我想知道为什么Html.ActionLink不会选择我定义的路由并相应地格式化URL?
另一个有趣的事实是,在控制器的一个代码中,我有类似return RedirectToAction("Dashboard", "Projects", new { accountID = newAccount.ID });
的东西,它按照我的预期构建了URL。
注意:我没有定义其他路线,除了通用的“全能”路线。我使用ASP.NET MVC3。
答案 0 :(得分:0)
我能够复制你得到的结果的唯一方法是将“ProjectsHome”路线置于下面的通用“全能”路线。当我将它放在通用路线上方时,ActionLink会以您想要的形式生成URL。
MVC路由引擎扫描路由表,直到它找到一个可以匹配的路由表,这意味着它永远不会到达捕获所有路径之后的已定义路由。
答案 1 :(得分:0)
地图路线需要像这样定义 -
routes.MapRoute( “ProjectsHome” “{帐户ID} /工程”, new {controller =“Projects”,action =“Dashboard”, accountID = UrlParameter.Optional } );
您错过了在地图路线中定义帐户ID。