EPiserver:ICurrentPage没有ContentLink的定义

问题描述 投票:0回答:2

我们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)需要对象引用

c# episerver
2个回答
0
投票

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

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

0
投票

看起来你试图在没有首先获得IContentRepository的实例的情况下调用GetLanguageBranches方法。您可以将IContentRepository注入静态扩展类,如下所示:

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

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

var pageLanguagesBranches = _contentRepository.Service.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();
© www.soinside.com 2019 - 2024. All rights reserved.