Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查询Umbraco节点的最佳实践_Umbraco_Querying - Fatal编程技术网

查询Umbraco节点的最佳实践

查询Umbraco节点的最佳实践,umbraco,querying,Umbraco,Querying,我是Umbraco CMS的初学者,我注意到每次需要查询节点时,我都依赖于常量id 例如: public static class Constants { public static class Pages { public static class System { public const int Root = 1059; public const int Home = 1092;

我是Umbraco CMS的初学者,我注意到每次需要查询节点时,我都依赖于常量id

例如:

public static class Constants
{
    public static class Pages
    {
        public static class System
        {
            public const int Root = 1059;
            public const int Home = 1092;
            public const int Pressemeddelelse = 1143;
        }

        public const int GratisKontoComplete = 1181;
        public const int TilmeldNyhedsbrevComplete = 1182;
    }
}
当我需要获取节点时,上面的代码可以帮助我,比如@Umbraco.NiceUrl(Constants.Pages.System.Root)

现在我的问题是:

有没有其他方法可以做到这一点?如果内容编辑器删除了该节点并创建了一个新节点,该怎么办?节点if肯定会正确更改。
你想让我通过NodeAlias查询吗?但是我不知道如何使用,我不想使用uQuery,因为我使用的是使用MVC的最新Umbraco版本7.4.3。

首先,您不应该使用ID检索节点。 有很多方法,但对我来说,最简单可靠的方法是使用linq查询。 例如,有三个节点HOME、BLOG和COMMENT。现在HOME是父节点,BLOG和COMMENT是HOME节点的子节点。现在,要检索父节点,请使用以下节点

Umbraco.typedContentRoot().First()

Model.Content.AncestorOrSelf(1.First()

其中model是当前节点。 您也可以使用此代码

var rootNode=新节点(-1)

所有aboce代码将帮助您获取根节点,即主节点,现在在获取根节点后,您可以使用SQL查询来获取主节点的所有子节点,依此类推。例如,如果我想检索BLOG节点,那么我的代码将是

'var Blog= rootNode.Children.First(x => x.DocumentTypeAlias == "Blog");'
其中“DocumentTypeAlias”是博客节点的别名。 希望这能对你有所帮助


干杯

首先,您不应该使用ID检索节点。 有很多方法,但对我来说,最简单可靠的方法是使用linq查询。 例如,有三个节点HOME、BLOG和COMMENT。现在HOME是父节点,BLOG和COMMENT是HOME节点的子节点。现在,要检索父节点,请使用以下节点

Umbraco.typedContentRoot().First()

Model.Content.AncestorOrSelf(1.First()

其中model是当前节点。 您也可以使用此代码

var rootNode=新节点(-1)

所有aboce代码将帮助您获取根节点,即主节点,现在在获取根节点后,您可以使用SQL查询来获取主节点的所有子节点,依此类推。例如,如果我想检索BLOG节点,那么我的代码将是

'var Blog= rootNode.Children.First(x => x.DocumentTypeAlias == "Blog");'
其中“DocumentTypeAlias”是博客节点的别名。 希望这能对你有所帮助


干杯

您有没有模块或库,我可以这样查询:UmbracoHelper.GetNodeByAlias(“Blog”),然后它会返回我发布的内容。重要提示:DocumentTypeAlias本身不是内容项的别名,而是文档类型的名称。所以Naveeds最后一个示例将使用文档类型“Blog”返回所有节点。要获取有关UmbracoHelper的更多信息,请查看此处:DocumentTypeAlias是您要检索的内容的别名,my query将仅返回博客内容。该查询包含.First,它只返回第一个匹配项。感谢您以任何方式共享该链接。这对我来说非常有用,我最终制作了一个帮助程序,如下所示
public IPublishedContent GetNodeByAlias(字符串别名){var umbracoHelper=new umbracoHelper(UmbracoContext.Current);var contentNode=umbracoHelper.typedContentsGleatXPath(String.Format(“/{0}”,别名));return contentNode;}
我也同意documentTypeAlias将返回具有相同文档类型的所有项目,因此在我的示例中,我将只查询具有唯一文档类型的唯一项目。您是否有一个模块或库,我可以这样查询:UmbracoHelper.GetNodeByAlias(“博客”),然后它将返回IPPublishedContent。重要提示:DocumentTypeAlias不是内容项本身的别名,而是文档类型的名称。因此Naveeds最后一个示例将返回使用文档类型“Blog”的所有节点。要获取有关UmbracoHelper的更多信息,请查看此处:DocumentTypeAlias是您要检索的内容的别名,我的查询将只返回博客内容。查询包含。First,它只返回第一次出现的内容。感谢您以任何方式共享链接。这对我非常有用。各位,我最终制作了一个这样的助手
public IPublishedContent GetNodeByAlias(字符串别名){var umbracoHelper=new umbracoHelper(UmbracoContext.Current);var contentNode=umbracoHelper.typedContentsGleatXPath(string.Format(“/{0}”,别名));返回contentNode;}
我也同意documentTypeAlias将返回具有相同文档类型的所有项目,因此在我的情况下,我将只查询具有唯一文档类型的唯一项目。