0

3つのパラメーターを受け入れるアクションにリダイレクトしている状況があります。これは私が次のようにやっています-

RedirectToAction("ProductSpecific", routeValues: new { partId = m.partId, categoryId= m.categoryId, categoryName = m.categoryName});

ただし、ページが読み込まれると、これらすべてのパラメータがクエリ文字列として含まれます。

Parts/ProductSpecific?partId=38&categoryId=1&categoryName=Monitor

ルートを書いてみましたが、うまくいきませんでした。誰かがこのシナリオでルートを書く方法を教えてもらえますか?

ありがとう

4

1 に答える 1

1

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

于 2013-03-01T06:19:44.657 に答える