私はいくつかの同様の質問を見ましたが、私は別の問題があることを発見しました。ASP MVC4異なるエリアに同じ名前のコントローラーで適切なメソッドを見つける
基本プロジェクトと3つの領域にコントローラを持つMVC4プロジェクトがあります。各領域には、AdminControllerという名前のコントローラとメソッドListが含まれています。
私の問題は、メソッドリストに移動するリンクを使用するときに、常に同じコントローラ(たとえば、ユーザ領域のAdminController)を経由して返されるビューが正しいことです。
プロジェクトの構造は、このようなものです:
- Mimbre.Administration(ウェブmvc4プロジェクト)
- エリア
- 内容
- コントローラ
- AdminController
- モデル
- ビュー
- 管理
- List.chtml -ContentsAreaRegistration.cs
- 管理
- コントローラ
- ログ
- コントローラ の
- AdminController
- モデル
- ビュー
- 管理
- List.chtml
- 管理
- LogsAreaRegistration.cs
- コントローラ の
- ユーザー
- コントローラ
- AdminController
- モデル
- ビュー
- 管理
- List.chtml
- 管理
- UsersAreaRegistration。CS
- コントローラ
- 内容
- コントローラ(ベース・プロジェクト)
- ビュー(基本計画)
- エリア
エリア登録のためのクラスは、次のようにRegisterAreaメソッドが含まれています(apropiate名前と名前空間を持つに従って現在のエリア):
public override void RegisterArea(AreaRegistrationContext context) {
context.MapRoute(
"Contents_default",
"Contents/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional },
new string[] { "Mimbre.Administration.Areas.Contents.Controllers" }
);
}
G lobal.asaxは、(ベースのプロジェクトで)ベースのプロジェクトindex.chtmlで
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
AreaRegistration.RegisterAllAreas();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new string[]{"Mimbre.Administration.Controllers"}
);
}
ためのレジスタルートのメソッドが含まれている私は、各エリアの方法を一覧表示するためのリンクを作成:生成で
<a href="@Url.Action("List", "Admin", new { area = "Contents"})" >Contents list</a>
<a href="@Url.Action("List", "Admin", new { area = "Logs"})" >Logs list</a>
<a href="@Url.Action("List", "Admin", new { area = "Users"})" >Users list</a>
HTMLこれらのリンクが表示されますこのように:
<a href="/Contents/Admin/List/">Contents list</a>
<a href="/Logs/Admin/List/">Logs list</a>
<a href="/Users/Admin/List/">Users list</a>
私はこれらのリンクが正しいと思いますが、問題は、どのリンクが常にユーザーエリアのAdminController、AdminContrのメソッドリストのメソッドリストを通して私を取るクリックしたことです別の領域のオレラーは決して選ばれない。
この問題は、コントローラの名前、各エリアの一意の名前を変更することで解決できますが、実際にはすべての領域で同じコントローラ名を使用する必要がありますか?
Thans in advance !!!
はフェリペ、答えてくれてありがとう、しかしAreaRegistrationクラスは一時的に、私はエリアごとにコントローラ、別の名前の名前を変更しなければならなかった、それはMV4のベータ版の問題がある場合、私は知らない、正しい名前空間を持っています。 – diegoe