【问题标题】:EpiServer - IContentLoader returns different page types when filtering for the start pageEpiServer - IContentLoader 在过滤起始页时返回不同的页面类型
【发布时间】:2022-11-11 16:26:57
【问题描述】:

我正在尝试在 Razor 代码中获取起始页面,以便我可以根据起始页面显示不同的导航。这是我的做法:

var contentLoader = EPiServer.ServiceLocation.ServiceLocator.Current.GetInstance<IContentLoader>();
var pages = contentLoader.GetChildren<PageData>(ContentReference.StartPage);

这就是调试器中显示的内容。我期望只看到类型的页面,开始。但是我看到了英雄页面和所有内容。有什么想法吗?

【问题讨论】:

    标签: c# episerver optimizely


    【解决方案1】:

    如果您想获取起始页(只有一个实例)并且它与在管理员模式下被选为站点配置的起始页相同的起始页,您应该执行以下操作

    var startPage = contentLoader.Get<StartPage>(ContentReference.StartPage);
    

    【讨论】:

    • 有多个起始页。而且我不得不使用 RootPage 内容参考。起始页内容参考在我的测试中不起作用。这就是为什么我选择我的答案。
    【解决方案2】:

    我能够通过传入根页面的 ContentReference 和我的起始页面对象来解决这个问题。

    var pages = contentLoader.GetChildren<namespace.StartPage>(ContentReference.RootPage);
    

    【讨论】:

    • 你有几个起始页吗?在您的问题中,您说“我正在尝试以 Razor 代码获取起始页,以便我可以根据起始页显示不同的导航”,而对于“起始页”部分,这表明只有一个实例开始页面,这使得这不是正确的方法。
    • @MarcusÅberg 这只是一个错字。有多个起始页
    • 嘿@ernest我想提供一些建议,如果以上只是你自己调试,请原谅我。不推荐使用 ServiceLocator 在 Razor 页面中获取 ContentLoader 的实例。相反,您应该考虑将服务注入您的 PageController 并通过 ViewModel 将您需要的内容传递给您的视图。我不明白获得所有 StartPages 的原因。我担心你最终会得到一个很大的硬编码条件来确定要显示的内容。对于 Nav,StartPage 或 SiteSettingsPage 具有 ContentArea 属性来保存 Nav Blocks 是很常见的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 2018-09-15
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多