C# 从Umbraco中的UrlName获取节点

C# 从Umbraco中的UrlName获取节点,c#,.net,xpath,umbraco,C#,.net,Xpath,Umbraco,我正在进行Umbraco设置(Umbraco 7),我需要能够从节点.UrlName加载节点 我尝试了Xpath,但没有成功。这是我的xpath: var facNode = umbraco.NodeFactory.Node.GetNodeByXpath("/*[@UrlName='" + urlName + "']"); 我还尝试了一些没有/的变体,使用/并只查找id而不是UrlName 这似乎很简单,但我似乎遗漏了一些东西。我对Umbraco非常陌生,因此非常感谢您的帮助 有没有比xpat

我正在进行
Umbraco
设置(
Umbraco 7
),我需要能够从
节点.UrlName
加载节点

我尝试了Xpath,但没有成功。这是我的
xpath

var facNode = umbraco.NodeFactory.Node.GetNodeByXpath("/*[@UrlName='" + urlName + "']");
我还尝试了一些没有
/
的变体,使用
/
并只查找
id
而不是
UrlName

这似乎很简单,但我似乎遗漏了一些东西。我对
Umbraco
非常陌生,因此非常感谢您的帮助

有没有比xpath更好的方法?我应该用什么课来做这个


提前谢谢

嗯,这里有几件事。首先,xpath是区分大小写的,因此您需要以
@urlName
为目标,而不是
@urlName

另外,值得指出的是,尝试通过urlName属性定位节点不是一个很好的策略,因为多个节点可能具有相同的urlName属性。这是可能的,因为Umbraco只坚持在节点共享同一父节点的情况下urlName属性是唯一的

这是有意义的,因为(例如,在对新闻/博客文章进行分组时)您可能希望在名为2014的节点下有一个名为10月的节点,但在名为2013的父节点下也有一个名为10月的节点。在这种情况下,xpath将同时定位两个节点,因此无法工作


就btter方式而言,这取决于上下文是什么以及您试图实现什么。当然,您应该避免使用
umbraco.NodeFactory.Node
,从umbraco 4.8开始,标准是使用
ippublishedcontent
接口,可以说它更灵活。

您可以使用uQuery,Node Node=uQuery.GetNodeByUrl(“/home.aspx”);这不是我想要的。我希望从UrlName属性获取该项。项目url无法满足我的需要。至于建议更好的方法,你能提供更多的上下文吗?例如,为什么您只有
urlName
。在视图、控制器、控制台应用程序中,您在何处执行此代码?