7

ここ数日、少し苦労していた質問があります。MVC を使用する場合、ブロックのレンダリングが Episerver 7 でどのように機能するかを理解しようとしています。

実際に動作する私の現在のセットアップは次のとおりです。

いくつかのプロパティを持つ「TeaserBlock」というブロック タイプを作成しました。

[ContentType(DisplayName = "TeaserBlock", GUID = "571582c4-6b99-4c0a-b000-f62265e312a9", Description = "A Teaser Block for show!")]
public class TeaserBlock : BlockData
{
    [Display( GroupName = SystemTabNames.Content, Order = 1)]
    public virtual string TeaserHeading { get; set; }

    [Display(GroupName = SystemTabNames.Content, Order = 2)]
    public virtual string TeaserText { get; set; }    
}

これに対応する部分ビューを Views/Shared/ に TeaserBlock.cshtml と呼びます。これはブロックをビューモードでレンダリングしますか?

私の最大の問題は、「ページ編集」を機能させることでした。いくつかの試行錯誤の後、最終的に次のコードで機能するようになりました。

[TemplateDescriptor(Inherited = true,
    Tags = new string[] { RenderingTags.Preview },
    TemplateTypeCategory = TemplateTypeCategories.MvcController)]
public class PreviewBlockController : ActionControllerBase, IRenderTemplate<BlockData>
{
    public ActionResult Index(BlockData currentBlock)
    {
        return View(currentBlock);
    }
}

対応するビューを PreviewBlockController に追加した後、「ページ編集」で機能しました。「TemplateTypeCategory = TemplateTypeCategories.MvcController)」という行が存在しない場合、機能しないことに気付くまでにかなりの時間がかかりました。この行が必要な理由を知っている人はいますか?

また、タグ「RenderingTags.Preview」を使用する際に魔法が必要ですか?

アプリケーションに 5 つの異なるブロックがあるとしましょう。その場合、5 つの異なるプレビュー コントローラーとそれらに対応するビューも必要ですか?

私が望むのは、ブロックのすべての「ページ編集」を処理できる、より一般的な「ブロック プレビュー コントローラー」を用意することです。ただし、これが可能かどうかはわかりません。すべてのブロックには異なるプロパティがあり、プレビューが意味のあるものになる場合は、プレビューに個別の .cshtml が必要になるためです。または、コードで、ブロックに関連するどのプロパティがコントローラーに送信されたかを見つけて、たとえばそれらをループできるようにする方法はありますか? そして、これの助けを借りて、1 つのプレビュー コントローラーと対応するビューだけが必要ですか?

これを最善の方法で処理する方法に関するガイドラインはありますか?

誰かがこの概念をもう少しよく理解するのを手伝ってくれることを願っています.episerverに関するいくつかの概念についての情報を見つけるのは難しいと思います.

4

1 に答える 1