1

私のプロジェクト構造:

Controller
    AdminController
    HomeController

エリア追加後、プロジェクト構造プロジェクトに管理エリアを追加しました。

Areas
    Admin
        Controller
            SomeController
Controller
    AdminController
    HomeController

その後、すべてのリンクが壊れます。例えば

@Html.ActionLink(
    "go to some action", 
    "SomeAction", 
    "Admin", 
    new { area = "" }, 
    null)

上記のリンクを書くと、にルーティングされますがwww.myDomain.com/Admin/SomeAction、これはAreaアクションであり、AdminControllerアクションにルーティングしたいと思います。

これどうやってするの?エリア名またはコントローラー名を変更する必要がありますか?

アップデート

上記のリンク出力:

domain/Admin/SomeAction
// I expect that is AdminController/SomeAction
// but not. There is SomeAction in my admin controller
// I get this error "The resource cannot be found."
// because it looks my expected, but it works unexpected
// it tries to call AdminArea/SomeController/SomeAction

アップデート2

例えば:

 @Html.ActionLink(
    "go to some action", 
    "SomeAnotherAction", 
    "Admin", 
    new { area = "" }, 
    null)

上記のリンクでは、自分の地域にSomeAnotherActionがあるため、エラーは発生しません。

エリア登録

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "Admin_default",
        "Admin/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

ありがとう...

4

1 に答える 1

1

最初にエリアを登録したので、それらが優先されます。これを回避する簡単な方法はありません。最善の解決策はAccountController、競合を回避するために、サイトの主要部分の名前を別の名前に変更することです。

もう1つの可能性は、エリアルート登録でコントローラーを制約することです。

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional },
    new { controller = "Some|SomeOther" }
);

これで、リクエストのみがそのエリアにルーティングされる/Admin/Some/{action}/Admin/SomeOther/{action}、そのエリアにルーティングされます。/Admin/SomeActionつまり、グローバルルート定義によってインターセプトされ、にルーティングされますAdminController

于 2013-03-22T14:03:03.393 に答える