1

mvc4アプリケーションに2つの領域があり、各領域の名前空間を登録しました。

 public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Intergration_default",
            "Intergration/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional },
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.Intergration.Controllers" }

        );

    } 
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Vend_default",
            "Vend/{controller}/{action}/{id}",
            new { action = "Index", id = UrlParameter.Optional},
              constraints: null,
            namespaces: new[] { "WebApplication.Areas.MyController.Controllers" }

        );

Intergration / MyControllerにアクセスできますが、MyControllerにアクセスしようとするとエラーが発生します

'mycontroller'という名前のコントローラーに一致する複数のタイプが見つかりました。これは、このリクエストを処理するルート('{controller} / {action} / {id}')が、リクエストに一致するコントローラーを検索するための名前空間を指定していない場合に発生する可能性があります。この場合は、「namespaces」パラメータをとる「MapRoute」メソッドのオーバーロードを呼び出して、このルートを登録します。

私は何が間違っているのですか?global.asaxで何か特別なことをする必要がありますか

4

1 に答える 1

2

あなたが提供したコード/説明に基づくと、それはいくつかの可能性があるように思われます:

  1. ルートコントローラーの名前空間(つまり、エリアではなく、プロジェクトのルートのControllersフォルダー)で、制約のない別のエリアとコントローラー名が衝突しています。
  2. おそらく、の2番目のエリア登録にVendは、誤った名前空間のように見えるものがあります。代わりWebApplication.Areas.MyController.ControllersWebApplication.Areas.Vend.Controllers。ルートコントローラーの名前空間に、そのVendエリア内の何かとコントローラー名を共有するコントローラーがあるに違いありません。
于 2012-05-15T02:57:47.497 に答える