3

私は2つの非常に単純なルートを持っています

       routes.MapRoute(
            "post", // Route name
            postPage + "/{slug}", // URL with parameters
            new { controller = "Home", action = "Article" } // Parameter defaults
        );

        routes.MapRoute(
            "page", // Route name
            "{slug}", // URL with parameters
            new { controller = "Home", action = "Page", slug = homePage} // Parameter defaults
        );

そしてこれが私のコントローラーロジックです

    public ActionResult Article(string slug)
    {
        return View(repo.GetPost(slug));
    }

    public ActionResult Page(string slug)
    {
        if (slug.ToLower() == MetaData.PostsPage.ToLower())
            return View("listPosts", repo.GetAllPosts());
        else
            return View("page", repo.GetPage(slug));
    }

homePageとpostPageは、データベース内の値から設定されます。ユーザーがデフォルトのページと投稿を表示するページを定義できるようにします。

「管理者」という名前の領域を追加すると、問題が発生します。RouteTableにコントローラーを追加しました

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

これで、ユーザーが管理者/アカウント/ログオンにアクセスすると、ページは正常に読み込まれますが、デバッガーは引き続きホームコントローラーとページアクションにアクセスしようとします。しかし、RouteDebuggerは、現在の要求と一致しないと言っています。これを修正する方法に戸惑っています。

RouteDebuggerのスクリーンショット:http : //i.stack.imgur.com/7cpHm.png私のHomeControlerページに入るデバッガーAtionResult:http: //i.stack.imgur.com/uSJBK.png

4

2 に答える 2

1

実際の問題は、エリアルートがグローバルルートをオーバーライドしており、両方のルートを区別するために、adminAreaRegistraton.csファイルのcontext.MapRouteメソッドでエリアのコントローラーの関連する名前空間を設定していることです。すなわち

context.MapRoute(
 "admin_default",
 "admin/{controller}/{action}/{id}",
 new { controller = "Home", action = "Index", id = UrlParameter.Optional },
 null,
 new string[] { "MVCApplication1.Areas.admin.Controllers" }
);
于 2012-06-15T17:54:34.283 に答える
1

私はその問題を見つけました。

サイトのメインエリアにfavicon.icoを設定しましたが、管理エリアには設定していません。そのため、管理エリアに移動すると、ブラウザはそのルートで取得されたfavicon.icoをリクエストしました。そのため、RouteDebuggerでルートが正常に表示されました。

助けてくれてありがとうクンダン!

于 2012-06-15T21:04:25.363 に答える