我有一个问题,最近几天我一直在挣扎。我试图了解在使用 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 进行预览。或者有什么方法可以让我在代码中找出块中相关的哪些属性将其发送到我的控制器,以便我可以循环遍历它们?并且借助这个只需要一个预览控制器和一个相应的视图?
有没有关于如何以最佳方式处理这个问题的指导方针?
希望任何人都可以帮助我更好地理解这个概念,我发现很难找到有关表观服务器的一些概念的信息。