「Projects」コントローラと「accountID」という名前のパラメータを取る「Dashboard」アクションがあります。
public ActionResult Dashboard(String accountID)
{
return View();
}
次のように定義されたルートがあります。
routes.MapRoute(
"ProjectsHome",
"{accountID}/projects",
new { controller = "Projects", action = "Dashboard" }
);
アイデアは、/1111/projects のような URL を持つことです。ここで、1111 は accountID を表します。URL は、プロジェクト コントローラーのダッシュボード アクションを実行します。
私が直面している問題は、 @Html.ActionLink("Projects", "Dashboard", "Projects", new { accountID = "1111" }, null)
/Projects/Dashboard?accountID=1111 のような URL を生成し、/1111/projects のようなものを期待していたことです。
私の回避策は を使用すること@Url.RouteUrl("ProjectsHome", new { accountID = "1111"})
ですが、なぜ Html.ActionLink が定義したルートを選択せず、それに応じて URL をフォーマットしないのか疑問に思っていました。
もう 1 つの興味深い事実は、コントローラーのコードの 1 つに、 return RedirectToAction("Dashboard", "Projects", new { accountID = newAccount.ID });
期待どおりに URL を構築するようなものがあることです。
注:一般的な「キャッチオール」以外のルートは定義していません。ASP.NET MVC3 を使用しています。