---
title: "MVCエリア"
slug: "mvc-areas"
abstract: "エリアはコントローラーやビューのコレクションをグループ化し、複雑なプロジェクトの細分化や整理に役立ちます。"
---
# MVCエリア

エリアはコントローラーやビューのコレクションをまとめて、複雑なプロジェクトの細分化や整理に役立ちます。これは大規模なMVC開発者チームがある場合に役立ちます。Sitecoreは各レンダリングにエリアを割り当て、メインビューレイアウトも含めて利用できます。

面積を指定する方法はいくつかあります:

-   レンダリングまたはレイアウト定義項目において
-   レンダリングパラメータにおいて
-   例えば、コード内でレンダリングを呼び出す場合: @Html.Sitecore().ViewRendering("Index", new { area = "MyArea" })
-   ルート内(ただし、デフォルトの構成ではこの機能が依存する PassthroughAreaResolveStrategy が無効になります)

独自のエリア解決ロジックを追加することもできます。例えば、エリアを指定する祖先やフォルダからエリアを決定したり、Web.configファイルのコンテキストサイトの属性から領域を/configuration/sitecore/sites/site要素から決定したりできます。

## 登録とエリア作成

領域をレジスタするために、SitecoreはInitializeパイプライン内のInitializeRoutesプロセッサを使用します。このプロセッサはMVCルートの設定を担当し、RegisterAreas()メソッドを呼び出します。このメソッドは、System.Web.Mvc.AreaRegistrationオブジェクトとしてインスタンス化できる型をすべてのアセンブリをスキャンします。これらのオブジェクトに対して、RegisterAreas()メソッドはSystem.Web.Mvc.AreaRegistrationContextクラスのインスタンスを作成し、そのインスタンスのRegisterArea()メソッドに渡します。

Visual Studioでプロジェクトを右クリックし、「 **追加**」をクリックし、「 **エリア**」を選択することでエリアを作成できます。

以下はエリアの登録と作成方法の例です:

public class FirstAreaRegistration : System.Web.Mvc.AreaRegistration
{
 public override void RegisterArea(AreaRegistrationContext context)
 {
 context.Namespaces.Add("WebApplication.Areas.First.Controllers");
 context.MapRoute("FirstContainer", "First/{controller}/{action}/{id}",
 new {controller = "General", action = "Test", id = UrlParameter.Optional});
 }
 public override string AreaName => "First";
}
public class SecondAreaRegistration : System.Web.Mvc.AreaRegistration
{
 public override void RegisterArea(AreaRegistrationContext context)
 {
 context.Namespaces.Add("WebApplication.Areas.Second.Controllers");
 context.MapRoute("SecondContainer", "Second/{controller}/{action}/{id}",
 new {controller = "General", action = "Test", id = UrlParameter.Optional});
 }
 public override string AreaName => "Second";
}

> !注名前空間をコンテキストに追加する必要があります。名前空間コレクション。

## 地域を決定する

各レンダリングおよびレイアウトビューの領域を決定するために、Sitecoreはレンダリングのプロファイリング初期化直後のmvc.renderRenderingパイプラインの初期段階でResolveAreaプロセッサを使用します。ResolveAreaプロセッサの唯一のコンストラクタは、IAreaResolveStrategyのインスタンスを必要とします。デフォルトの構成ではChainedAreaResolveStrategyを適用し、1つが値を返すか残らないまで一連のIAreaResolveStrategyインスタンスを呼び出します。

IAreaResolveStrategyタイプのデフォルトシリーズは以下の通りです:

-   RenderingDefinitionAreaResolveStrategy– はレンダリング定義項目から面積を決定します。この方法を使うには、コントローラやビューレンダリングの定義項目のDataセクションのAreaフィールドの面積を指定します。
-   RenderingParametersAreaResolveStrategy – は areaと呼ばれるレンダリングパラメータから面積を決定します。この方法を使うには、レンダリングパラメータで面積を指定します。例えば area = "MyArea"。
-   RenderingLayoutAreaResolveStrategy– レイアウトビューの定義項目から面積を決定するこの方法を使うには、MVCビューレイアウトの定義項目のDataセクションのAreaフィールドの領域を指定します。

/App\_Config/Include/Sitecore.Mvc.configファイルは/configuration/sitecore/mvc要素を定義します。この要素はInitializeRoutesプロセッサに新しいエリアロジックが干渉する可能性のある領域を除外するよう指示します。

<mvc.renderRendering>
 <processor type="Sitecore.Mvc.Pipelines.Response.RenderRendering.InitializeProfiling, Sitecore.Mvc"/>
 <processor type="Sitecore.Mvc.Pipelines.Response.RenderRendering.ResolveArea, Sitecore.Mvc">
 <param desc="areaResolver" type="Sitecore.Mvc.Pipelines.Response.RenderRendering.ChainedAreaResolveStrategy, Sitecore.Mvc">
 <Resolvers hint="list">
 <resolver type="Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderingDefinitionAreaResolveStrategy, Sitecore.Mvc"/>
 <resolver type="Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderingParametersAreaResolveStrategy, Sitecore.Mvc"/>
 <resolver type="Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderingLayoutAreaResolveStrategy, Sitecore.Mvc"/>
 </Resolvers>
 </param>
 </processor>
 <processor type="Sitecore.Mvc.Pipelines.Response.RenderRendering.SetCacheability, Sitecore.Mvc"/>

## 拡張性

主な拡張点はIAreaResolveStrategyです。これを使って面積の解消戦略を提供します。Sitecoreデフォルトでいくつかの戦略があります:

-   ChainedAreaResolveStrategy – はIAreaResolveStrategyオブジェクトのリストを歩いて領域情報を解決します。最初にnullでない答えを出した方が勝ちます。リスト内のどの戦略も領域を解決できなければ、Resolveメソッドはnullを返します。
    
-   RenderingDefinitionAreaResolveStrategy – は現在のレンダリング定義項目のAreaフィールドを探して領域を解決します。
    
-   RenderingParametersAreaResolveStrategy – はパラメータ辞書でエリアキーを探してエリアを解決します。これは、例えば匿名のオブジェクトパラメータを追加することで、静的バウンディングのビューレンダリングに対して定義できます。
    
    @Html.Sitecore().ViewRendering("Index", new { area = "MyArea" })
    
-   RenderingLayoutAreaResolveStrategy – は現在のレイアウト定義項目である**Area**フィールドを探してエリアを解決します。