ASP.NET MVCアプリケーションでディレクトリごとに処理を分ける - エリアの利用

ASP.NET MVCでのエリアの利用について紹介します。

概要

ASP.NETでエリアを利用するとWebアプリケーションをグループ分けできます。ディレクトリごとに処理を分けることができます。

プログラム例

事前準備

ASP.NET MVCアプリケーションを作成します。コントローラー(DefaultController)とビュー(Index.cshtml)を作成します。コードは下記になります。

RouteConfig.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace AspNetMvcArea
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                namespaces: new[] { "AspNetMvcArea.Controllers" }
            );
        }
    }
}
DefaultController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace AspNetMvcArea.Controllers
{
    public class DefaultController : Controller
    {
        // GET: Default
        public ActionResult Index()
        {
            return View();
        }
    }
}
index.cshtml
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
      Default/Index
    </div>
</body>
</html>

エリアの追加

ソリューションエクスプローラのウィンドウでプロジェクトのノードをクリックして選択します。右クリックしてポップアップメニューを表示します。メニューの[追加]の[エリア]の項目をクリックします。


[Add Area]ダイアログが表示されます。


Area name テキストボックスに追加するエリア名を入力します。今回は"MyArea"とします。入力ができたらダイアログボックス右下の[Add]ボタンをクリックします。


エリアが追加されます。ソリューションエクスプローラに"Areas"のディレクトリが作成されAresディレクトリの下に追加したエリアの名前のディレクトリ(今回の場合は"MyArea")が追加されます。


また、テキストエディタウィンドウには、作成された"(エリア名)AreaRegistration.cs"ファイル(今回の例の場合は "MyAreaAreaRegsitration.cs")が開かれます。
MyAreaAreaRegistration.cs
using System.Web.Mvc;

namespace AspNetMvcArea.Areas.Next
{
    public class NextAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Next";
            }
        }

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

エリアのコントローラーの追加

作成したエリアにコントローラーを追加します。ソリューションエクスプローラの "Areas/エリア名/Controller" フォルダをクリックして選択し右クリックします。ポップアップメニューが表示されますので、[追加]メニューの[コントローラー]の項目をクリックします。


[スキャフォールディングを追加]ダイアログが表示されます。中央の項目リストの[MVC5 Controller - Empty]の項目をクリックして選択します。選択後ダイアログ右下の[追加]ボタンをクリックします。


[Add Controller]ダイアログが表示されます。


[Controller name]のテキストボックスに追加するコントローラーの名称を入力します。今回は "ExtraController"とします。入力する名称はルートに作成したコントーローラー名(DefaultController)とは別の名称にします。(同じ名称にするとネームスペースの明示的な指定が必要になるため。詳細はこちらの記事を参照)


"Areas/MyArea/Controller" ディレクトリに "ExtraController.cs"ファイルが作成されます。

エリアのビューの追加

続いてエリアのビューを追加します。ソリューションエクスプローラで "Areas/エリア名/views/(コントローラー名)"のディレクトリ(今回の場合は "Areas/MyArea/views/Extra"ディレクトリ)をクリックして選択します。右クリックしてポップアップメニューを表示します。メニューの[追加]をクリックしサブメニューを表示し[ビュー]の項目をクリックします。


[Add View]ダイアログが表示されます。


View mname のテキストボックスに作成するビューの名称を入力します。今回は "Index" とします。入力ができたらダイアログ右下の[Add]ボタンをクリックします。


"Areas/MyArea/views/Extra"ディレクトリに"Index.cshtml"ファイルが作成されます。


Index.cshtmlファイルを編集します。
/Areas/MyArea/views/Extra/Index.cshtml
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
      /MyArea/Extra/index
    </div>
</body>
</html>

実行結果

プロジェクトを実行し、/MyArea/Extra/Index のURLにWebブラウザでアクセスします。下図の画面が表示されます。ExtraControllerにより、"Areas/MyArea/views/Extra/Index.cshtml"のビューのページが表示されます。


/Default/Index のURLにアクセスします。こちらは、DefaultControllerにより、"/views/Default/Index.cshtml"のビューのページが表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-09-03
iPentec all rights reserverd.