Umbraco 4.11获得父节点

时间:2014-06-17 18:37:15

标签: c# umbraco

应该是一个简单的答案。

我使用的是Umbraco 4.11,我需要获取一个强制节点的节点。我是C#的一个菜鸟,我正在修理别人做的控件。应该很简单,但它最初是在从4.7到4.11的DLL更新之前编写的。

以下是我的代码。我需要获得父节点。执行此操作的正确语法是什么。您可以看到旧代码被注释掉的位置。

提前致谢。

 //New using
 using umbraco.NodeFactory;

 private string GetEmailContactProperty()
    {
        Node node = Node.GetCurrent();
        string email = null;

        do
        {
            if (node.NodeTypeAlias == NodeTypeAlias)
            {
                email = node.GetProperty("emailContact").Value;

                if (!String.IsNullOrEmpty(email))
                    break;
            }

            //node = node.Parent;
           //***Need Parent Node here. new Node is asking for Overload.
            node = new Node().Parent;

        } while(node.Parent.Id > -1);

2 个答案:

答案 0 :(得分:2)

原始代码应该就获取父节点而做你所要求的。

node = node.Parent;

答案 1 :(得分:0)

基本上,从您的代码中,您希望在您的祖先之间遍历树,以找到名为" emailContact"那不是IsNullOrEmpty。

我认为你要找的是一段这样的代码:

var emailContact = CurrentModel.AncestorsOrSelf().Items.Where(n => !string.IsNullOrWhiteSpace(n.GetProperty("emailContact").Value))

另一种方法是将recursive标志设置为true的属性设置为true,如下所示:

var emailContact = Model.GetProperty("emailContact ", true).Value; 

(见这篇文章:http://our.umbraco.org/forum/developers/razor/19005-Recursive-fields-using-Razor-macro?p=1

一方面,看起来你正在使用Documents而不是"内容节点",这是后台控制还是前端控制?

希望这有帮助