1. MVCの

MVCエリア

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

エリアを使用すると、コントローラとビューのコレクションをグループ化して、複雑なプロジェクトを細分化および整理できます。これは、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でプロジェクトを右クリックし、Addをクリックして、Areaを選択します。

次に、エリアを登録して作成する方法の例を示します。

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";
}
メモ

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

エリアの決定

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

IAreaResolveStrategyタイプのデフォルトのシリーズには、次のものが含まれます。

  • RenderingDefinitionAreaResolveStrategy- レンダリング定義アイテムから領域を決定します。この方法を使用するには、コントローラまたはビュー レンダリングの定義項目のDataセクションにあるAreaフィールドに領域を指定します。

  • RenderingParametersAreaResolveStrategyareaと呼ばれるレンダリングパラメータから領域を決定します。この方法を使用するには、レンダリング パラメータで領域を指定します (例: 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には、デフォルトでいくつかの戦略が付属しています。

  • ChainedAreaResolveStrategyIAreaResolveStrategyオブジェクトのリストを歩くことにより、エリア情報を解決します。最初にnull以外の回答で回答した人が勝ちます。リスト内のどのストラテジーもエリアを解決しない場合、Resolveメソッドはnullを返します。

  • RenderingDefinitionAreaResolveStrategy - 現在のレンダリング定義アイテムでAreaフィールドを探してエリアを解決します。

  • RenderingParametersAreaResolveStrategy – パラメータディクショナリでエリアキーを探してエリアを解決します。これは、静的にバインドされたビュー レンダリングに対して、次のように匿名オブジェクト パラメータを追加することで指定できます。

    @Html.Sitecore().ViewRendering("Index", new { area = "MyArea" })

  • RenderingLayoutAreaResolveStrategy – 現在のレイアウト定義アイテムのAreaフィールドを探してエリアを解決します。

この記事を改善するための提案がある場合は、 お知らせください!