Umbraco -从文本而不是nodeId获取内容



我目前在我的项目中有以下代码:

var umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
IPublishedContent currentContent = umbracoHelper.TypedContent(UmbracoContext.Current.PageId);
var contentService = UmbracoContext.Current.Application.Services.ContentService;
int configPageId = 0;
if(currentContent.AncestorsOrSelf().Select(x => x.Id).ToArray().Contains(1309))
{
configPageId = 1872;
} 
else if(currentContent.AncestorsOrSelf().Select(x => x.Id).ToArray().Contains(1308))
{
configPageId = 1660;
}
if(configPageId != 0)
{
IContent content = contentService.GetById(configPageId);
linkCreditSimulator = content.GetValue("linkCreditSimulator").ToString();
linkAskNow = content.GetValue("linkAskNow").ToString();
}

我想不管是谁干的,都是因为不同的环境有不同的id。

我希望这是正常的。

如果我运行以下查询:

SELECT TOP (1000)  d.text
FROM [cmsContent] c
LEFT join cmsContentXml cxml on c.nodeId = cxml.nodeId
LEFT join cmsMedia m on m.nodeId = c.nodeId
LEFT join cmsDocument d on d.nodeId = c.nodeId
LEFT join cmsMedia cm on cm.nodeId = c.nodeId
LEFT join cmsMember mb on mb.nodeId = c.nodeId
LEFT join cmsPreviewXml p on p.nodeId = c.nodeId
LEFT join cmsTagRelationship tr on tr.nodeId = c.nodeId
where c.nodeId = 1872

我得到的值是"模拟器",这在不同的环境中是相同的。

我试图在contentService中找到任何类似于

的方法
IContent content = contentService.GetByName("Simulator");

但是我不能。你知道有什么办法可以做到吗?你会推荐其他的方法吗?

问好

假设"是一个特定的内容类型,你可以查询该类型使用它的别名:https://our.umbraco.com/documentation/Reference/Querying/UmbracoHelper/#contentatxpathstring-xpath -这样你只需要硬编码的别名,而不是一堆id,正如你所说,可以和将区分不同的环境。

使用ContentService也应该保持在最低限度,因为它使用数据库访问(像你的例子中巨大的SQL查询)而不是缓存。ContentAtXPath使用缓存

最新更新