EPiserver:ICurrentPage没有ContentLink的定义

时间:2019-04-02 08:25:15

标签: c# episerver

我们的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>的下面加上了以下消息:

  

不受支持的内部API。...

     

非静态字段,方法或   属性   ContentRepository.GetLanguageBranches<PageData>(ContentReference)

2 个答案:

答案 0 :(得分:0)

如果您有一个继承自所有页面的BasePage的概念,则可以尝试以下操作:

 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;
    }

答案 1 :(得分:0)

似乎您正在尝试调用GetLanguageBranches方法,而没有先获取IContentRepository的实例。 您可以像这样将IContentRepository注入到静态扩展类中:

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

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

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