ASP.NET MVCアプリケーションでディレクトリごとに処理を分ける - エリアの利用
ASP.NET MVCでのエリアの利用について紹介します。
概要
ASP.NETでエリアを利用するとWebアプリケーションをグループ分けできます。ディレクトリごとに処理を分けることができます。
プログラム例
事前準備
ASP.NET MVCアプリケーションを作成します。コントローラー(DefaultController)とビュー(Index.cshtml)を作成します。コードは下記になります。
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" }
);
}
}
}
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();
}
}
}
@{
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")が開かれます。
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ファイルを編集します。
@{
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を愛用