2016-11-09 9 views
1

コントローラのディレクトリにHomeController.csとAccountController.csがあります。コントローラのディレクトリに "Admin"という名前の新しいフォルダを追加しました.DashboardController.csを追加しました。asp.net mvc 5管理ルート

残念ながら/ admin/Homeと/ admin/AccountのそれぞれにルーティングするDashboardControllerにルーティングする/ admin /コントローラ。私は/ admin/homeと/ admin/Accountが404になることを望んでいます。これはどうやって行うのですか?ここ

は私RouteConfig.csあなたの管理ルートで

routes.MapRoute(
      name: "Admin", 
      url: "admin/{controller}/{action}/{id}", 
      defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+0

が、私はそれを行うための適切な方法は、 'areas' HTTPを使用して、だと思います。 com/community/blogs/dhananjay_kumar/archive/2015/11/25/areas-in-asp-net-mvc.aspx – Hackerman

答えて

1

である、あなたは、下図のようにdashboard{controller}を置き換えるために、それはあなたのURLに/admin/部分の後に次のことを扱っていないという方法が必要ですコントローラとして。

routes.MapRoute(
     name: "Admin", 
     url: "admin/dashboard/{action}/{id}", 
     defaults: new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional } 
    ); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
0

MVCルートは、フォルダ構造に基づいてマップされていません。 あなたのURL( "admin/{controller}/{action}/{id}")では、最初の/の部分文字列はコントローラの名前を表します。この場合、要求が "DashboardController"ではなく "AdminController"を呼び出すように指定しています。 @Wellspringの解決策はここでは正しいです。

0

@Hackermanのコメントで示唆されています。これを行う正しい方法は、管理者エリアを導入することです。これによりyoursite.com/adminページのルートが自動的に作成されます。

管理者エリアを追加するには、Webプロジェクトを右クリックし、[追加]> [エリア]を選択します。

次に、Dashboardコントローラとビューをその領域の対応するフォルダに配置します。

エリアを追加するだけでなく、RouteConfig.csのデフォルトルートが管理領域のコントローラをプルアップしないようにする必要があります。これを行うには、Route.config.csのDefaultルートを編集する必要があります。あなたはfalseにUseNamespaceFallbackデータ・トークンをMapPathのへの呼び出しにnamespace属性を追加し、設定したい://www.infragistics:

Route defaultRoute = routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
    namespaces: new[] { typeof(HomeController).Namespace } 
); 
// this makes it so the route only looks for controllers under 
// the namespace specified through the namespaces parameter 
defaultRoute.DataTokens["UseNamespaceFallback"] = false;