この機能が標準でサポートされているかどうかはわかりませんが、いつでもカスタム ルートを記述して実装できます。
public class MyRoute : Route
{
public MyRoute() :
base(
"{controller}/{action}/{parentid}/{currentid}",
new RouteValueDictionary(new
{
controller = "home",
action = "display",
currentid = UrlParameter.Optional
}),
new RouteValueDictionary(new
{
// adjust the constraint if your ids are not numeric
// but you must have a constraint when a route parameter is
// non optional unless this is the last parameter
parentid = @"^([0-9])+$"
}),
new MvcRouteHandler()
)
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
if (rd == null)
{
return null;
}
var currentid = rd.Values["currentid"] as string;
if (!string.IsNullOrEmpty(currentid))
{
return rd;
}
rd.Values["currentid"] = rd.Values["parentid"];
return rd;
}
}
次に、このルートを登録します。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add("myroute", new MyRoute());
}
次のコントローラーを定義したとします。
public class HomeController : Controller
{
public ActionResult Display(int parentid, int currentid)
{
return Content(string.Format("{0}, {1}", parentid, currentid));
}
}
次の方法でリクエストできます。
/home/display/123
-> 親 ID=123 および現在の ID=123
/home/display/123/456
-> 親 ID=123 および現在の ID=456