---
title: "部分的な視点"
slug: "partial-views"
abstract: "Sitecore ASP.NETレンダリングSDKの部分ビュー、設定およびコンテンツアクセス機能の概要。"
---
# 部分的な視点

> !重要以前にアプリを統合していた場合、それは旧版のASP.NETコアレンダリングSDK(バージョン22以前)を使用しています。このSDKは更新を受け取っていないため、[最新のバージョンへのアップグレード](https://doc.sitecore.com/xmc/en/developers/asp-net/latest/asp-net-core-sdk/upgrade-from-v22.html) をお勧めします。

部分ビューは、別のビューのレンダリングされた出力内にHTMLの出力をレンダリングします。 *部分ビュー* という用語は、[ASP.NET](http://asp.net/)モデルビューコントローラー(MVC)アプリ(マークアップファイルを *ビュー*と呼ぶ場合)やRazor Pagesアプリ(マークアップファイルを *ページ*と呼ぶ場合)を開発する際に使います。詳細については、[Microsoftの部分ビューに関するドキュメント](https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial?view=aspnetcore-3.1)をご覧ください。

SitecoreレンダリングエンジンSDKは、Sitecoreページを構成する軽量コンポーネントに対してMVC部分ビューを使用しています。例えば、プレースホルダーのみを含む構造コンポーネントです。

Sitecoreレンダリングホストアプリケーションで部分ビューを作成することは [標準的なMVCの規則](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)に従います。同様に、Sitecoreレンダリングホストにおける部分ビュー発見は[ASP.NETコアMVC](https://docs.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-3.1)の標準ルールに従います。

レイアウトサービスの応答を部分ビューにマッピングする必要があります。これらのマッピングはStartupクラスのConfigureServices()メソッドで設定されます。

マッピング述語の順序は拡張メソッド呼び出しの順序によって決まります。最も貪欲なマッピング述語の前に特定のマッピング述語を追加することを推奨します。

## 部分ビューの設定

部分ビューを作成したら、[AddPartialView()およびAddDefaultPartialView()拡張メソッド](https://doc.sitecore.com/xp/ja/developers/hd/19/sitecore-headless-development/asp-net-core-rendering-engine.html "ASP.NET Core Rendering Engine")でレイアウトサービスの応答を部分ビューにマッピングする必要があります。

この例では、AddPartialView("HeaderBlock", "\_HeaderBlock")HeaderBlock応答成分を\_HeaderBlock部分ビューにマッピングし、AddPartialView(name => name.StartsWith("sc"), "\_OtherBlock")scの接頭辞を持つすべての応答成分を\_OtherBlock部分ビューにマッピングし、AddDefaultPartialView("\_ComponentNotFound")は前の2つのメソッド呼び出しで一致しない応答成分を\_ComponentNotFoundデフォルトの部分ビューにマッピングします。

public void ConfigureServices(IServiceCollection services)
{
 var renderingEngineBuilder = services.AddSitecoreRenderingEngine(options =>
 options

 // Map Partials
 .AddPartialView("HeaderBlock", "\_HeaderBlock")
 .AddPartialView(name => name.StartsWith("sc"), "\_OtherBlock")

 // Add fallback for any other component
 .AddDefaultPartialView("\_ComponentNotFound");
 );
}

## 部分的なRazorビューからSitecoreコンテンツにアクセスする方法

Razorビューでコードブロックを追加してレイアウトサービスデータにアクセスすることができます:

@using MyRenderingHost.ViewModels;
@using Sitecore.LayoutService.Client.Response.Model.Fields

@{
 var route = this.SitecoreRoute();
 var context = this.SitecoreContext();
 var component = this.SitecoreComponent().ReadFields<ContentBlock>();
 var pageTitleField = route.ReadField<TextField>("pageTitle");
}

<section>
 <h1 asp-for="@pageTitleField"></h1>
 <h2>Site name: @context.Site.Name</h1>
 <h2>Route name: @route.Name</h1>
 <h2 asp-for="@component.Heading"></h2>
 <div>
 <sc-text asp-for="@component.Content"></sc-text>
 </div>
</section>

レイアウトサービスの結果からはこちらから内容を読み取ることができますが、モデルバインディングで値を読み取ることはできません。部分ビューでルート、コンテキスト、コンポーネントの値にアクセスする必要がある場合は、モデルバウンドビューやビューコンポーネントの使用を検討してください。

> !注Sitecore.AspNet.RenderingEngine.Extensions名前空間でRazorページ拡張子を見つけられます:
> 
> -   SitecoreRoute() - 現在のSitecore Routeオブジェクトを取得。
>     
> -   SitecoreContext() - 現在のSitecore Contextオブジェクトを取得。
>     
> -   SitecoreComponent() - 現在のSitecore Componentオブジェクトを取得。
>     

## 部分的な視点から表示コンポーネントへの移行

部分ビューはレイアウトサービスの応答からのデータアクセスを必要とする場合があります。これは部分ビューが意図したよりも複雑になっていることのサインかもしれません。この場合、モデルバウンドビューコンポーネントの使用を推奨します。

幸いなことに、部分ビューからモデルバウンドビューコンポーネントへの移行は非常に簡単です:

-   必要なレイアウトサービス応答プロパティを持つビューモデルを作成します。
-   Startupクラスでは、部分ビューのレジストレーションをモデルバウンドビューのコンポーネントレジストレーションに置き換えます。
-   Razorビューが/Views/Shared/Components/SitecoreComponent フォルダに必ず配置されていることを確認してください。