通常、エリアを作成すると、global.asaxとは異なるデフォルトのルートが表示されます。例えば、私はMVC3プロジェクトにおけるメディアの領域を作成し、デフォルトルートは次のようになります。エリアの
context.MapRoute(
"Media_default",
"Media/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
ルート、彼らは内のコントローラを探していることを除いて、本当にあなたのグローバルasaxで定義されたルートよりも違いはありません別の名前空間。また、global.asaxのルートの前にロードされます。これは、Application_StartでRegisterRoutesの前にRegisterAllAreasが呼び出されたために表示されます。
一般的に、これはあなたのglobal.asaxで定義されたルートとルートコントローラのURLスキーマです:ように
base/ControllerAName/Action1Name
base/ControllerAName/Action2Name
base/ControllerBName/Action6Name
...と。これは、MVCをそのままの状態で取得する「規約」です。よく見て、そしてあなたは、このパターンは、あなたのグローバルasaxにベースルート定義と一致していることがわかります。一方
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
、あなたが領域を使用する規則は、あなたの「従来の」URLスキーマは次のようになりますということです:
base/AreaName/ControllerAName/Action1Name
base/AreaName/ControllerAName/Action2Name
base/AreaName/ControllerBName/Action6Name
違いがありますか?これは、エリア登録のデフォルトルート定義が次のようになっている理由です: "Media/{controller}/{action}/{id}"
このすべてが述べているように、 。 Mediaという名前のエリアと、そのエリアの一部のコントローラーのいくつかのアクションメソッドに移動するURLベース/メディアがあるように思えます。それが正しければ、これを試してみてください - MVCによって生成されたデフォルトルートの前に、あなたのより具体的なルートを置くことを思い出し:
context.MapRoute(null,
"media",
new { action = "Index", controller = "Media" }
);
context.MapRoute(
"Media_default",
"Media/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
これはMVCは自分の中でのMediaControllerにindexアクションメソッドにベース/メディアと一致することを意味しますその経路が最初に定義されているので、メディア領域。
また、新しい領域を作成するときは、は名前空間を変更しません。これにより、問題が発生します。
もう1つのヒントは、経路名を経路に指定しないことです。最初の引数としてnullをどのように渡したかに注目してください。これは良い習慣と考えられています。名前でルートにアクセスすると非常に面倒なことがあります。
新しいプロジェクトを開始したり、新しい領域を作成したり、これらの提案を試してみることをお勧めします。 Webフォームから来るルートを把握するのは難しいかもしれませんが、一度操作すれば、WebフォームのURL-TO-FILEマッピングより優れていると思います。
本当に経路は同じですか? '/ media'というURLは、あなたのメディア領域のデフォルトコントローラまたは' media'というコントローラと一致していますか? – Jan
これは、mediacontrollerというコントローラーと一致する必要があります。ルートは同一ですが、routenameのみが異なります。 –
[OK]を選択します。まったく同じルートを使用することは意味をなさない。最後に登録されたルートは決して一致しない。ルート名はルーティングに全く影響しません。 – Jan