私がしたいことは/Products/Details/{id}
のページがあり、アクションの詳細にはProductsController
、さらに編集ページは/Products/Details/Edit/{id}
になります。ASP.NET MVCルーティング:アクション名にスラッシュを付けることはできますか?
アクションで[ActionName("Details/Edit")]
を使用してこれを実行しようとしましたが、動作しません。
私がしたいことは/Products/Details/{id}
のページがあり、アクションの詳細にはProductsController
、さらに編集ページは/Products/Details/Edit/{id}
になります。ASP.NET MVCルーティング:アクション名にスラッシュを付けることはできますか?
アクションで[ActionName("Details/Edit")]
を使用してこれを実行しようとしましたが、動作しません。
アクション名にスラッシュを付けることはできません。
なぜ次の操作をしないのですか?
私の好みは、次の操作を行うために、次のようになります。
希望は意味があります!
が含まれています。詳細、履歴、文書など、これらの各ページは、ビューと編集フォームで表示されます。 –
しかし私はあなたが描いているルーティングパターンが好きです。 /製品/ {id} /詳細および/製品/ {id} /詳細/編集は完全に受け入れられるでしょう。 –
私はさらに行くと、ちょうど削除します/詳細/ /製品/編集/ {ID}を製品すなわち/製品/ {ID}の表示と編集が可能性のために – David
は前にこのデフォルト1のようにルートを追加します:あなたは何ができるか
routes.MapRoute(
"DefaultWithDetails",
"{controller}/Details/{action}/{id}"},
null);
1 JayArrが、私はその意味的に考えていますが、要求された何をすべきかルイスの提案は良い考えです。 –
James、はい。同意する。しかし、私はちょうど質問に答えていた:) –
はこれです。デフォルトルートの前にこのような新しいルートを設定してください。
routes.MapRoute(
"PRoute",
"{controller}/{action}/{action2}/{id}",
null
);
この場合、Productsコントローラにはこのような動作があり、パラメータ名がルート内の名前と一致することに注意してください。
public ActionResult Details(string action2, string id)
{
switch (action2)
{
case "edit":
// Do Something.
return View("edit");
case "view":
// Do Something.
return View("view");
default :
// Do Something.
return View("bad-action-error");
}
}
今すぐ詳細アクションは、アクション2と、URLからIDを渡されます。 /products/details/view/7詳細アクションのようなURLは "view"と "7"を取得し、action2のswitchまたはifステートメントを使用して処理を続行できます。これで、他のサブアクションを含むように簡単に拡張できます。
なぜそれをEditDetailsと呼ぶのですか? – RichardOD
これは達成しようとしているURLと一致しないためです。 –