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();
我们在 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();