RedirectToAction の 2 番目の引数は routeValues であるため、これらはクエリ文字列に追加されます。追加のルートを作成するには、引き続きクエリ文字列に値を渡す必要がありますが、parts/productspecific/{partId}/{categoryId}/{categoryname} のように、必要ないと思います。
クエリ文字列に値が必要ない場合は、TempData オブジェクトを見てください。これはセッションに似ていますが、次のリクエストまで存続します。
このようなもの:
public ActionResult DoSomething()
{
TempData["partId"] = partId;
TempData["catId"] = catId;
TempData["catName"] = catName;
return RedirectToAction("ProductSpecific");
}
public ActionResult ProductSpecific()
{
var partId = TempData["partId"];
var catId = TempData["catId"];
var catName = TempData["catName"];
var model = service.LoadProduct(partId, catId, catName);
return View(model);
}
アップデート:
ルートの場合:
routes.MapRoute(
name: "ProductRoute",
url: "{controller}/{action}/{partId}/{categoryId}/{categoryname}",
defults: new { controller = "product", action = "productspecific"}
);
app_start の route.config クラスでそのルートをデフォルトの routesm の前に追加し、製品固有のメソッド シグネチャを変更して、partid、catid、およびカテゴリ名のパラメーターを受け入れるようにします。phil hack からこれを使用して、ルートをプロファイリングすることもできます: Route Debugger