タイプされたスロット


CshtmlComponentは、ASP . NET用の広範な機能セットを持つコンポーネントフレームワークです.NETコアMVCとRazorページプロジェクト(ブレザー用ではありません).See the GitHub repository of CshtmlComponent here .

スロット名
CStmlMComponentは既に名前付きスロットの使用をサポートしていますが、スロットの種類はどうですか?このポストは、これがどのように達成されることができるかについて示します.これは広範なチュートリアルではありませんので、既にcshtmlcomponentに慣れているはずです.
名前付きスロットをサポートするCSHTMLコンポーネントのかみそりマークアップは、次のようになります.
@using SampleRazorPagesApplication
@model ExampleComponent

<div class="example-component">
    <h1>
        @Model.Title
    </h1>

    <div class="example-component-action-bar">
        @Html.Raw(Model.NamedSlots["ActionBar"])
    </div>

    <div class="example-component-child-content">
        @Html.Raw(Model.ChildContent)
    </div>
</div>

名前付きスロットを持つCSHTMLComponentの初期化
その後、コンポーネントを初期化することができます.
<ExampleComponent Title="Hello World">
    Some HTML that gets captured in Model.ChildContent.

    <CshtmlSlot Name="ActionBar">
        Some HTML that gets captured in Model.NamedSlots["ActionBar"].
    </CshtmlSlot>
</ExampleComponent>
スロット名を明示的に記述しなければならないことに注意してください.これは動作しますが、多少迷惑なエラーです.幸運にも、これを固定することはタイプされたスロットで全く簡単です.

スロット定義型
型付きスロットを定義するには、CshtmlComponentSlotを継承し、コンストラクタでNameプロパティを設定するクラスを作成します.
[HtmlTargetElement("ExampleComponentActionBar"]
    public class ExampleComponentActionBar: CshtmlComponentSlot
    {
        public ExampleComponentActionBar(IHtmlHelper htmlHelper) : base(htmlHelper)
        {
            Name = "ActionBar";
        }
    }
それです.たとえば、Nameの値を保守性の良い静的フィールドとして格納したい場合がありますが、これは必要ありません.

型スロットを持つCStmlMenuの初期化
型指定されたスロット定義を使用すると、例のコンポーネントは次のように初期化できます.
<ExampleComponent Title="Hello World">
    Some HTML that gets captured in Model.ChildContent.

    <ExampleComponentActionBar>
        Some HTML that gets captured in Model.NamedSlots["ActionBar"].
    </ExampleComponentActionBar>
</ExampleComponent>
名前を明示的に指定する必要がないことに注意してください.

結論
CSHtmlComponentは、名前付きと型付きの両方のスロットをサポートします.タイプ化されたスロットは、メンテナンスとリファクタリングをかなり容易にするような多くの利点をもたらします.この機能は、まだCCTTMComponentドキュメントで説明されていませんが、将来的になります.
CshtmlComponentを試してみてください!MVCとRazorのページプロジェクトに役立つかもしれません.