功能未按预期“退出”

时间:2018-10-04 16:14:35

标签: c# umbraco

我(在Umbraco中)有一个父节点,一个父节点的孩子和一个孩子的孩子。这三个节点都共享一个comment属性,这三个节点都有可能填充此属性或其任意组合。

基本上,我需要知道要查看的当前节点具有此属性,如果没有,则检查父节点,以此类推。

所以我写了以下方法:

    public int getRecursiveNodePropertyParent (Node targetNode, string alias)
    {
        //does this node have the property?
        var found = getNodeProperty(targetNode.Id, alias);

        if (found == "")
        {
            Node myparentNode = new Node(targetNode.Parent.Id);
            getRecursiveNodePropertyParent(myparentNode, alias);
        }
        else
        {
            return Int32.Parse(targetNode.Id.ToString());
        }

        return 0;
    }

如果我正在查看的当前页面具有该属性,则该函数可以正常工作,但是如果当前页面不具有该属性,但其父级却具有该属性,则该函数将无法正常工作。

基本上会发生什么: 1)它检查当前页面,但未发现任何内容 2)然后调用在当前页面的父级中传递的函数 3)找到值并点击“返回Int32.Parse(targetNode.Id.ToString());” 4)然后继续检查树*,即,然后击中'getRecursiveNodePropertyParent(myparentNode,alias);'

  • 当“返回Int32.Parse(targetNode.Id.ToString());”行时,这是我不确定的含义应该会导致例程退出并返回正确的ID,但代码块不会退出。

有人可以指出我正确的方向吗?

谢谢, C

3 个答案:

答案 0 :(得分:2)

您对递归调用的返回值不做任何事情。然后继续执行该函数,最终返回0。您似乎想返回它:

DaggerAppCompatActivity

由于// ... if (found == "") { Node myparentNode = new Node(targetNode.Parent.Id); return getRecursiveNodePropertyParent(myparentNode, alias); // ^^^^^^ } else { return Int32.Parse(targetNode.Id.ToString()); } 的两个分支都返回一个值,因此您甚至可以立即删除return 0;

答案 1 :(得分:0)

在您的代码中,您没有返回

getRecursiveNodePropertyParent(myparentNode, alias);

相反,它继续并用

到达最后一行

返回0;

也许您应该返回第一个的值?我不知道您的其余代码,但也许已经足够了。

答案 2 :(得分:0)

Umbraco开箱即用,无需任何其他代码。

假定您使用的是V6或V7,而不是内容的Node表示形式,请使用IPublishedContent,它具有一个称为GetPropertyValue的方法,您可以告诉该方法递归树。因此,例如,您可以执行以下操作:

var propertyValue = content.GetPropertyValue<string>("myAlias", recursive: true);

这将意味着propertyValue将具有内容节点的值(如果已设置),否则它将自动为您递归树并寻找它。