在EpiServer中渲染不同的部分模板

当页面添加到ContentArea中时,我有一个页面部分应该呈现。 这是完美的,但现在我在两个不同的页面上有两个不同的ContentAreas,我希望添加相同的子页面以在每个父页面上呈现不同的页面。

我知道我可以以某种方式在呈现局部图像时使用标记来区分ContentAreas:

@Html.PropertyFor(m => m.MyBlockProperty, new { Tag = RenderingTags.Sidebar })
@Html.PropertyFor(m => m.MyContentArea, new { Tag = RenderingTags.Sidebar })

但是,在我的SomePage.cshtml(这是我的部分视图)中,我是否在这里获得了一个变化或某种东西,所以我知道哪个Tag被要求? 还是有一些像SidebarSomePage.cshtml这样的命名约定,以便我可以定义多个部分模板? 我必须创建一个控制器来处理这个问题吗? 这似乎是不必要的,我只是想根据页面改变一下html ...


我敢肯定,你可以像这样访问视图(或控制器)中ViewData字典中的标签:

@ViewData["Tag"]

您还可以将任何其他设置传递给视图

@Html.PropertyFor(m => m.MyContentArea, new { Tag = RenderingTags.Sidebar, RenderThisPartialDifferently = true, ShowHeading = false })

然后访问它们:

@ViewData["RenderThisPartialDifferently"]
@ViewData["ShowHeading "]

然后你可以选择在两者之间放置一个控制器,并呈现完全不同的视图。

很确定,标签视图也有一个命名约定。 但我确实知道的是,您可以在/ shared / displaytemplates中放置一个与标记名称相同的视图。 但这不是你现在要求的。


创建一个PartialContentController<T> ,然后使用TemplateDescriptorAttribute指定您不想使用的标签。 然后使用PropertyFor as Johan在视图中解释。

从EPiServer文档

您选择呈现内容实例的模板取决于特定的上下文,如频道和标记。 要使模板自动注册,必须实现EPiServer.Web.IRenderTemplate(其中T表示可以呈现哪种模型)。 如果您为模板(如PageBase,ContentControlBase,BlockControlBase,PageController,PartialContentController或BlockController)使用基类,则不需要显式实现接口,因为这是由基类完成的。 另外,您可以使用TemplateDescriptorAttribute来指定有关模板的更多详细信息,如标记和继承,稍后还会介绍有关该主题的更多信息。


除了所有答案外,您还可以使用模板注册器为特定标签注册其他模板。

[ServiceConfiguration(typeof(IViewTemplateModelRegistrator))]
public class TemplateCoordinator : IViewTemplateModelRegistrator
{

    public void Register(TemplateModelCollection viewTemplateModelRegistrator)
    {
        viewTemplateModelRegistrator.Add(typeof(MyBlock), new TemplateModel
        {
            Tags = new[] { RenderingTags.Sidebar },
            AvailableWithoutTag = false,
            Path = BlockPath("Some-Other-Template.cshtml")
        });
    }
}

这将确保如果块被渲染“内部” RenderingTags.Sidebar上下文(例如通过Html.PropertyFor(...., new { tag = RenderingTags.Sidebar }))文件Some-Other-Template.cshtml将被使用。

AlloyTech在那里有示例代码。

链接地址: http://www.djcxy.com/p/68877.html

上一篇: Render different partial templates in EpiServer

下一篇: Local Block as a part of the ContentArea