6

私はMVC 2のことを奴隷化し続けています:エリア...

これで、メインの Controllers フォルダーと Areas の 1 つに、同じ名前 (HomeController) の 2 つのコントローラーができました。どちらも名前空間が異なるため...理論的には共存する必要がありますが、共存しません。エラーは次のとおりです。

コントローラー名「ホーム」は、次のタイプの間であいまいです。

Namespace.HomeController

Namespace.Areas.AreaName.Controllers.HomeController

これは、ホーム コントローラー (特殊なもの?) だけに関係するものではなく、どのエリアのどのペアにも当てはまります。

異なる領域内で同じ名前のコントローラーを共存させるにはどうすればよいですか?

御時間ありがとうございます :)

編集: 異なる領域内で同じコントローラー名を使用しても問題ありません: ルーティングを名前空間に登録すると問題が解決します (Scott の Allen の記事に感謝します)。

4

2 に答える 2

8

アプリケーションの名前空間をMvcApplication1として作成する場合は、これを試してみてください。

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  AreaRegistration.RegisterAllAreas();
  routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }, // Parameter defaults
    null,
    new[] { "MvcApplication1.Controllers" }
  );

}

ルートルートコントローラーの名前空間「MvcApplication1.Controllers」を設定し、実行します。

このヒントを願っています。

于 2009-11-07T03:05:14.220 に答える
2

同じクラス名を持つ 2 つのコントローラーが 2 つの異なる領域にある場合、これは期待どおりに機能します。

あなたの場合、エリアに1つのコントローラーがあり、「デフォルトのコントローラーフォルダー」に1つのコントローラーがあります。これでよろしいですか?「デフォルトのコントローラ フォルダ」には、デフォルトのアカウント コントローラなど、ある種の共有コントローラが含まれているはずですか?

これは、名前空間やクラス名の問題ではなく、実際には ASP.NET ルーティングの問題です。問題は、あいまいなコントローラー名への 2 つのルートがある可能性が最も高いです。1 つはエリア登録によって登録され、もう 1 つは RegisterRoutes のデフォルト ルート登録によって登録されます。

また、エリアの順序付けに関するこの投稿も参照してください。

于 2009-11-03T22:31:26.450 に答える