部分ビュー
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
部分ビューは、別のビューのレンダリング出力内に HTML 出力をレンダリングします。マークアップ ファイルがビューと呼ばれる ASP.NET Model-View-Controller (MVC) アプリを開発する場合、またはマークアップ ファイルがページと呼ばれる Razor Pages アプリを開発する場合は、部分ビューという用語を使用します。詳細については、ASP.NET Core の部分ビューについての Microsoft のドキュメントを参照してください。
Sitecore レンダリング エンジン SDK は、Sitecore ページを作成する軽量コンポーネントに MVC 部分ビューを使用します。これには、プレースホルダーのみを含む構造コンポーネントなどが含まれます。
Sitecore レンダリング ホスト アプリケーションでの部分ビューの作成は、標準の MVC 規則に従います。同様に、Sitecore レンダリング ホストでの部分ビュー検出は、ASP.NET Core MVC の標準規則に従います。
レイアウト サービスの応答を部分ビューにマッピングする必要があります。これらのマッピングは、Startup
クラスの ConfigureServices()
メソッドで設定されます。
部分ビューを設定する
部分ビューの作成後は、AddPartialView<TModel>() 拡張メソッドと AddDefaultPartialView() 拡張メソッドを使用して、レイアウト サービスの応答を部分ビューにマッピングする必要があります。
この例では、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>
ここでレイアウト サービスの結果からコンテンツを読み取ることはできますが、モデル バインディングを使用して値を読み取ることはできません。部分ビューでルーティング、コンテキスト、またはコンポーネントの値にアクセスする必要がある場合は、代わりにモデル バインド ビューまたはビュー コンポーネントの使用を検討してください。
部分ビューからビュー コンポーネントへの移行
部分ビューでは、レイアウト サービスの応答からのデータへのアクセスが必要になる場合があります。これは、部分ビューが意図したよりも複雑になったことを示している可能性があります。この場合、代わりにモデル バインド ビュー コンポーネントを使用することをお勧めします。
幸いにも、部分ビューからモデル バインド ビュー コンポーネントへの移行は非常に簡単です。
-
必要なレイアウト サービス応答プロパティを使用してビュー モデルを作成します。
-
Startup
クラスで、部分ビューの登録をモデル バインド ビュー コンポーネントの登録で置き換えます。 -
Razor ビューが
/Views/Shared/Components/SitecoreComponent
フォルダーに配置されていることを確認します。