我们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)
需要对象引用
如果您具有所有页面都继承的基页(您应该)的概念,则可以尝试以下操作:
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注入静态扩展类,如下所示:
private static readonly Injected<IContentRepository> _contentRepository = default(Injected<IContentRepository>);
然后将更新的第3行重写为以下内容:
var pageLanguagesBranches = _contentRepository.Service.GetLanguageBranches<PageData>(currentPage.ContentLink).ToList();