Umbraco:x.GetPropertyValue("myProp") 对比 x.myProp

Umbraco: x.GetPropertyValue("myProp") vs x.myProp

我用的是 Umbraco v4,但觉得这应该是个常见问题。

我有一个 "Content Picker" 的通用 属性 "myNode",它应该获得一个 DynamicNode...

so doying myObj.myNode 我获取节点本身...所以可以使用myObj.myNode.Url

但是 执行 myObj.GetPropertyValue("myNode") 我获得了 ... 节点的字符串 ID 值...所以不能再执行 myObj.GetPropertyValue("myNode").Url (字符串没有 Url 属性)

不能直接用myObj.myNode,因为名字是"dynamic"(同样的功能应该用"your"+"Node"或者"their"+ "Node" 根据条件 - 这个例子非常近似,但希望思路清晰)...

我什至做了 myObj.GetPropertyValue<DynamicNode>("myNode"),但结果是一样的:“8124”(节点 ID)

那么,如何获得真正的 属性 值,而不仅仅是它的字符串表示形式?

使用类似的东西:mynode = Umbraco.Content(CurrentPage.myNode).Url(对于 Umbraco 6 和 7)对于 Umbraco 4,我在脚本文件中使用这个 Model.NodeById(Model.myNode).Url;。 (我认为它至少需要 Umbraco 4。7.x)

另见 https://our.umbraco.org/documentation/Using-Umbraco/Backoffice-Overview/Property-Editors/Built-in-Property-Editors/Content-Picker

您的内容选择器不包含节点,它包含节点的 ID。

myObj.GetPropertyValue("myNode") 完全按照所说的去做,在实例化的 DynamicNode 对象上获取名为 myNode 的 属性 的值。它不是为 return 节点本身设计的。

如果您想 return 包含您的 'myNode' 属性 ID 的节点,那么您必须在调用中使用该值来实例化另一个 DynamicNode

DynamicNode myNewNode = new DynamicNode(myObj.GetPropertyValue("myNode"))

Model.NodeById(myObj.GetPropertyValue("myNode"))

一个不太优雅的解决方案,但至少是一个有效的解决方案:

var linkNode = image.GetPropertyValue("imgLinkNode" + model._lang.ToUpper());
if (linkNode is string)
{
    string id = linkNode;
    linkNode = model.NodeById(id);
}
var linkNodeUrl = linkNode.Url;