EPiserver:ICurrentPage 没有 ContentLink 的定义

EPiserver: ICurrentPage does not have a definition for ContentLink

我们在 EPiserver 的编辑希望能够根据需要修改每个页面的 hreflang 链接。所以我想修改我们的页面并启用对 episerver 中默认 hreflang 功能的覆盖。

我已经开始尝试编写自己的 htmlhelper,它将为我整理 hreflang,以便我以后可以修改它。

在文件 HtmlHelpers.cs 中,我从以下内容开始:

public static IHtmlString HrefLangLinks()
{
    var pageLanguagesBranches = ContentRepository.GetLanguageBranches<PageData>(ICurrentPage.ContentLink).ToList();
    var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

    // Dictionary<String, String>
    return null;
}

Visual Studio 通知我 ICurrentPage 没有 ContentLink 的定义。

我对 EPiserver 不是很熟悉,因此非常感谢任何帮助。

更新 1:

建议如下:

public static IHtmlString HrefLangLinks(this BasePage currentPage)
        {
            var pageLanguagesBranches = ContentRepository.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
            var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

            // Dictionary<String, String>
            return null;
        }

而不是 BasePage 我们有 StandardPage 继承自 SitePageData 继承自 PageData。我尝试了所有三个,但都没有用,Visual Studio 强调此部分 ContentRepository.GetLanguageBranches<PageData> 并显示以下消息:

Unsupported internal API....

An object reference is required for the non-static field, method or property ContentRepository.GetLanguageBranches<PageData>(ContentReference)

如果您有(您应该)所有页面都继承自的基页的概念,您可以尝试以下操作:

 public static IHtmlString HrefLangLinks(this BasePage currentPage)
    {
        IContentRepository repo = ServiceLocator.Current.GetInstance<IContentRepository>();
        var pageLanguagesBranches = repo.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
        var availablePageLanguages = FilterForVisitor.Filter(pageLanguagesBranches).OfType<PageData>();

        // Dictionary<String, String>
        return null;
    }

您似乎试图在未先获取 IContentRepository 实例的情况下调用 GetLanguageBranches 方法。 您可以像这样将 IContentRepository 注入静态扩展 class:

private static readonly Injected<IContentRepository> _contentRepository = default(Injected<IContentRepository>);

然后将更新的第 3 行重写为如下内容:

var pageLanguagesBranches = _contentRepository.Service.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();