0

会社エリアのある MVC4 アプリがあります。

与えられたファイル構造:

Areas   
\
  Companies
    \
     Controllers
       |
       DefaultController (Contains Index and Edit actions)
       TestController (Contains Index and Test action)

URL を次のようにしたい:

  • /会社
  • /企業/編集
  • /会社/テスト
  • /会社/テスト/テスト

私のルートは、CompanysAreaRegistration クラスのように設定されています。

context.MapRoute(
    name: "Companies_default",
    url: "Companies/{controller}/{action}/{id}",
    defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
            );

結果:

  • /会社 - 作品
  • /会社/編集 - 404
  • /会社/デフォルト/編集 - 作品
  • /会社/テスト - 作品
  • /会社/テスト/テスト - 作品

URL に "Default" を指定せずに DefaultController.Edit() アクションにアクセスするにはどうすればよいですか?

アップデート

ブラッドの答えに基づいて、このようなパスをハードコーディングでき、それが機能することを知っています。私は本当に自動解決策をもっと望んでいました。一部のエリアのデフォルト コントローラーで、最終的にいくつのアクションが実行されるかわかりません。毎回新しいルートを作成する必要はありません。

これは、App_Start/RouteConfig.cs ファイルの MVC テンプレートの一部として追加された既定のルートです。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

HomeController に "Test" というアクションがある場合、URL /Test を使用してそのアクションを実行できます。これを機能させるために、"/Test/{id}" のような URL で新しいルートを追加する必要はありません。URL の {controller} 部分を無視し、デフォルトのコントローラー構成を使用しているようです。

エリアで行うと、この動作が変わるのはなぜですか?

Area ルートは、URL の "Companies/" プレフィックスを除いて、Default ルートとまったく同じです。

テストとして、デフォルト ルート URL を に変更しましたが、url: "Example/{controller}/{action}/{id}"引き続きURL /Example/Test で HomeController.Test() にアクセスできます。

4

1 に答える 1

2

使用:

context.MapRoute(
    name: "Companies_Edit",
    url: "Companies/Edit/{id}",
    defaults: new { controller = "Default", action = "Edit", id = UrlParameter.Optional }
);

パラメータは左から右に入力されることに注意してください (スキップしてデータ{controller}を入力することはできません{action}。想定したい場合{controller}は、 で指定しますdefaults) 。

于 2013-04-07T00:32:20.087 に答える