3

AreasMVC 3 内で正しく動作しない問題がいくつかあります。次のフォルダー構造とAdminエリアが設定されています。

ここに画像の説明を入力

管理ページ (インデックス) から、Adminたとえばエリア内の他のビュー ページに移動しようとしてAdmin/Floor/Createいますが、たとえばThe resource cannot be found、試したすべての URL の組み合わせでエラーが発生します。

  • @Html.ActionLink("floors", "Index", "Floor", new { area = "Admin" }, null)
  • /フロア/インデックス/
  • /管理者/フロア/インデックス/

どれも機能しません。最初のActionLinkものを使用して、エリア外から管理者のインデックス ページにリンクすることができましたが、ここでは役に立ちません。

エリア登録は次のようになります。

context.MapRoute(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional }
        );

誰でも助けを提供できますか?

ありがとうございました

4

1 に答える 1

0

問題はルーティングにあります。デフォルトのコントローラーを次のように設定する必要がありますAdminController

context.MapRoute( 
    "Admin_default", 
    "Admin/{controller}/{action}/{id}", 
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional } 
); 

これを指定しない場合、MVCは探しているものを完全に認識せず/admin/admin、最初のビューを表示するために実際に移動することを期待します。したがって、上記のようにルーティングを変更してから、このアクションリンクを使用して次の場所にアクセスしますFloorController.Create()

@Html.ActionLink("floors", "create", "floor", new { area = "admin" }, null)

少し拡張すると、このようにルーティングを設定すると、URLは次のようになります。

/admin // Executes AdminController.Index()
/admin/floor // Executes FloorController.Index()

アップデート

エリアレイアウト

MaciejRogozińskiのプロジェクトをダウンロードしたので、これはあなたのプロジェクトが現在抱えているのと同じ問題を私に与えます。デフォルトのアクションからのリンクはにリンクしています/admin/admin/。これは、前述したように、エリアルーティングにデフォルトのコントローラーが指定されていないため、プロジェクトが探しているものです(これはMaciejのプロジェクトにも当てはまります)。デフォルトのコントローラーを指定すると、に移動でき/admin、その結果、AdminController.Index()が呼び出されます。そのコントローラーを指定しないと、ルーティングから/admin/adminにのみこのビューを取得できます。これも、Maciejのアプリケーションが実行していることです。

于 2012-08-06T14:57:21.303 に答える