1

私は、4 つの個別のセクションがあり、それぞれに独自のコントローラーがある Web サイトに取り組んでいます。これらのコントローラーはいくつかのモデルを共有しますが、モデルはそれを呼び出すコントローラーに基づいて少し異なる動作をします。

私がたどりたいルートはではなく{controller}/{model}/{id}/{action}を使用できるようにするためです。controller1/cars/5/editcontroller1/editcar/5

コントローラーにモデルとアクションの組み合わせを理解させ、それらを異なる ActionResults で処理させる方法はありますか、またはモデル名で ActionResult を使用し、条件を使用してどのアクションを実行するかを判断する必要がありますか?

Ruby ではget "/controller1/cars/:id/edit" do. MVC4で似たようなものを探しています。

ルートの例:

  • /controller1/cars
    • (controller1 からのすべての車を含むビューを返します)
  • /controller1/cars/5
    • (controller1 から ID 5 の車を含むビューを返します)
  • /controller1/cars/5/edit
    • (controller1 から ID 5 の車を編集するためのビューを返します)
  • /controller2/cars
    • (controller2 からのすべての車を含むビューを返します)
  • /controller2/boats
    • (controller2 からのすべてのボートを含むビューを返します)
4

2 に答える 2

1

このルートはあなたのニーズに合っていると思います。アクション メソッドには巧妙なロジックが必要ですが、それを処理するためのツールを提供する必要があります。私の行動の説明を読んでください。

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{model}/{id}/{action}", // URL with parameters
            new { controller = "Home", action = "View", id = UrlParameter.Optional } // Parameter defaults
        );
  • このルートはデフォルトで View と呼ばれるアクション (おそらく Display に使用される) になり、別の Action を指定するオプションがあります。
  • Modelアクションメソッドに引数として渡されidます。残念ながら、Model は型ではなく文字列として送信されます (それを Factory クラスにフィードすることもできます)。
  • if が省略されている場合 (例: /controller2/boats)、アクションに null として渡されます。これを処理するにはロジックが必要ですが、それを処理するためのツールが提供されます。
于 2013-02-13T17:25:07.610 に答える
0

回答ありがとうございます。これに苦労したのは、ルートでコントローラーを適切に分離する方法がわからなかったからです。これにより、私のアイデアは MVC 標準から脱却し、ほとんどコントローラーのコントローラーを実装しようとしました。

ようやく「エリア」に出くわしたとき、これこそが私が必要としているものだとすぐに気づきました。Web サイトのセクション (またはエリア) ごとにエリアを追加でき、各エリア内で個々のコントローラーとビューを定義できましたが、モデルはすべてのエリアの外の共有ディレクトリに残りました。これで完全に機能するようになりました。

于 2013-02-15T16:53:44.067 に答える