3

サイトで見つかった他のすべての投稿を無視すると言うかもしれません。

私のソリューションには前面と背面の 2 つの領域があり、既定で提供される既定のルート コントローラーとビューを使用したくありません。

私のFrontAreaRegistration.csは次のようなものです:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Front",
        "Front/{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        , new[] { "Show.Areas.Front.Controllers" }
    );
}

私のBackAreaRegistration.csは次のようなものです:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Back_default",
        "Back/{controller}/{action}/{id}",
        new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }
        , new[] { "Show.Areas.Back.Controllers" }
    );
}

そしてGlobal.asaxのような:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

次の例外を取得:

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

「ホーム」の要求により、次の一致するコントローラーが見つかりました: Show.Areas.Front.Controllers.HomeController Show.Areas.Back.Controllers.HomeController

問題は、フロント エリアからホーム コントローラーに到達できないことです。context.MapRoute メソッドのオーバーロードに正しい名前空間を追加しても...

どんな助けでも大歓迎です。

4

1 に答える 1

1

リクエストでエリア名を指定していないため、エラーが発生します。そのため、(Global.asax からの) "Default" ルートが要求に一致し、"Home" コントローラーの "Index" アクションを検索しようとします。(両方の領域で) 2 つの一致がある限り、例外がスローされます。
これを修正する方法はいくつかあります。1 つの可能性は、Global.asax を変更することです。

routes.MapRoute(
   "Default", // Route name
   "{controller}/{action}/{id}", // URL with parameters
   new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
   new[] { "Show.Areas.Front.Controllers" }
).DataTokens.Add("Area", "Front");

ただし、この場合、「デフォルト」ルートはフロント エリアでのみ機能します。

于 2012-09-04T23:26:13.717 に答える