Razor 如何确定umbraco中的当前页面文档类型?

Razor 如何确定umbraco中的当前页面文档类型?,razor,macros,umbraco,doctype,Razor,Macros,Umbraco,Doctype,关于翁布拉科,我有一个非常简单的问题,但至今还没有明确的答案 我有一个标准的razor模板,带有@显示变量和一些内联C#代码 在我使用的模板中的某一点上: @Umbraco.RenderMacro("myCustomMacro"); 没有问题,一切正常 现在,这个宏被插入到每个页面上(它在主模板中),但我有一个页面属性,允许内容作者通过页面属性中的复选框打开和关闭它,同样到目前为止一切都很好 然而,我现在发现,对于某个“文档类型”,必须显示该组件,因此我一直在尝试找到一种方法来执行该检查 在我

关于翁布拉科,我有一个非常简单的问题,但至今还没有明确的答案

我有一个标准的razor模板,带有@显示变量和一些内联C#代码

在我使用的模板中的某一点上:

@Umbraco.RenderMacro("myCustomMacro");
没有问题,一切正常

现在,这个宏被插入到每个页面上(它在主模板中),但我有一个页面属性,允许内容作者通过页面属性中的复选框打开和关闭它,同样到目前为止一切都很好

然而,我现在发现,对于某个“文档类型”,必须显示该组件,因此我一直在尝试找到一种方法来执行该检查

在我看来,这应该像做这样的事情一样简单:

@{
  if(CurrentPage.documentType == "someDocTypeAliasHere")
  {
     //Render the macro
  }
  else
  {
     // Render the macro only if the tick box is checked
  }
 }
正如我所说的,这是(或者我认为应该是)一个非常简单的操作,但到目前为止似乎还没有结果

到目前为止我试过什么? 除了阅读umbraco上提到与razor有关的每一页和@CurrentPage变量外,Iv'e还浏览了razor属性备忘单,并尝试了最常见的属性,包括(无特定顺序):

还有各种各样的字母组合,再加上一些看起来可能符合要求的字母组合

属性始终不存在或为空,因此它们中没有可用于帮助确定结果的可用信息

所以现在,经过几天的兜圈子,什么地方都没有得到,我发现自己在这里

(请注意:这不是搜索XSLT问题,也不是迭代子集合或类似的内容,因此任何发布XSLT、宏、页面模板或类似内容的请求都将被拒绝,我只需找到一种方法来确定当前呈现页面的文档类型。)

干杯

肖蒂

PS:忘了提了,我在用

umbraco v 4.11.8(装配版本:1.0.4869.17899)


以防万一有人问。

你认为每次在页面上访问页面属性(如nodetypealias等)时确实需要创建一个节点,试试这个我在我的网站上有相同的功能,但在侧菜单中,根据页面/部分,它会显示一个不同的菜单链接

    @{
        var currentPageID = Model.Id;
        var currentPageNode = Library.NodeById(currentPageID);

        if (currentPageNode.NodeTypeAlias == "someDocTypeAliasHere")
          {
             //Render the macro
          }
          else
          {
             // Render the macro only if the tick box is checked
          }
     }

让我知道这是否适用于您。

在Umbraco 7中使用
currentPageNode.DocumentTypeAlias
在Umbraco 7.1中我使用:
@if(@CurrentPage.DocumentTypeAlias==“NewsItem”)
这与本文无关,但搜索谷歌让我看到了这篇文章,因此,我想我会与大家分享一下,以防有其他人在处理这个问题:在Umbraco 7中,获取网站中特定类型的所有内容:

var articles = CurrentPage.AncestorOrSelf(1).Descendants()
                   .Where("DocumentTypeAlias == \"BlogPost\"").OrderBy("CreateDate desc");

如果您的razor视图继承自
Umbraco.Web.Mvc.UmbracoViewPage
,您也可以使用
UmbracoHelper

@if (UmbracoHelper.AssignedContentItem.DocumentTypeAlias.Equals("NewsItem")) { ... }
查询特定文档类型也很容易:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")
此代码将递归返回
IPublishedContent
节点列表。 如果希望将此列表与特定的DocumentType信息一起使用,则必须将这些项映射到特定的类型。除此之外,
IPublishedContent
为您提供节点的

我后来发现您一直在使用较旧版本的Umbraco.:)
此实现仅适用于v7。

谢谢denford,我将尝试一下,然后返回给您。结果证明,这解决了我的问题,尽管不是直接解决的。我一直在查看宏中定义的“CurrentPage”(也就是说它不是空的),但是,如果我直接转到模型,我需要的一切都在那里。我所要做的就是检查“@Model.NodeTypeAlias”,我是金色的。先生,我向您致敬……6.x也是如此(即使用DocumentTypeAlias而不是NodeTypeAlias)。我需要让我的屁股进入装备,并实际升级到7.2.6中测试的V7:-)。不工作,
currentPageNode
根据编译器不存在
CurrentPage.DocumentTypeAlias
确实有效。非常感谢。我还没有深入研究Umb7,但我知道有一些重大的变化。
CurrentPage.DocumentTypeAlias
在7.2.6中为我工作。请注意,Reles的示例在
CurrentPage
之前有一个额外的@符号。
UmbracoHelper.AssignedContentItem.Descendants("NewsItem")