2009-08-12 13 views
2

私がしたいことは/Products/Details/{id}のページがあり、アクションの詳細にはProductsController、さらに編集ページは/Products/Details/Edit/{id}になります。ASP.NET MVCルーティング:アクション名にスラッシュを付けることはできますか?

アクションで[ActionName("Details/Edit")]を使用してこれを実行しようとしましたが、動作しません。

+0

なぜそれをEditDetailsと呼ぶのですか? – RichardOD

+0

これは達成しようとしているURLと一致しないためです。 –

答えて

5

アクション名にスラッシュを付けることはできません。

なぜ次の操作をしないのですか?

  • /製品/詳細/ {ID} -For表示
  • /製品/編集/ {ID} -For編集

私の好みは、次の操作を行うために、次のようになります。

  • /製品/ {ID} /ビュー-For表示
  • /製品/ {ID} /編集/ -For編集

希望は意味があります!

+0

が含まれています。詳細、履歴、文書など、これらの各ページは、ビューと編集フォームで表示されます。 –

+1

しかし私はあなたが描いているルーティングパターンが好きです。 /製品/ {id} /詳細および/製品/ {id} /詳細/編集は完全に受け入れられるでしょう。 –

+0

私はさらに行くと、ちょうど削除します/詳細/ /製品/編集/ {ID}を製品すなわち/製品/ {ID}の表示と編集が可能性のために – David

1

は前にこのデフォルト1のようにルートを追加します:あなたは何ができるか

routes.MapRoute(
    "DefaultWithDetails", 
    "{controller}/Details/{action}/{id}"}, 
    null); 
+0

1 JayArrが、私はその意味的に考えていますが、要求された何をすべきかルイスの提案は良い考えです。 –

+0

James、はい。同意する。しかし、私はちょうど質問に答えていた:) –

1

はこれです。デフォルトルートの前にこのような新しいルートを設定してください。

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ステートメントを使用して処理を続行できます。これで、他のサブアクションを含むように簡単に拡張できます。

関連する問題