umbracoNaviHide没有在Where声明中工作

时间:2012-04-25 16:33:33

标签: asp.net-mvc-3 razor umbraco umbraco5

尝试获取给定文档类型的子项,并将umbracoNavihide设置为false:

以下产生正确的输出。

@foreach (var child in root.Children.Where("ContentTypeAlias == \"DocumentTypehere\""))
{
    if (child.umbracoNaviHide == "False")
    {
        continue;
    }
    <li>@child.Name</li>
}

这不是:

@foreach (var child in root.Children.Where("umbracoNaviHide == @0 && ContentTypeAlias == \"DocumentTypehere\"","False"))
{
        <li>@child.Name</li>   
}

4 个答案:

答案 0 :(得分:2)

根据{{​​3}},Umbraco 5不支持

umbracoNaviHide

  

虽然这些特殊的别名 [原文如此] [recte:do] 很棒,而且非常容易使用   (如果你没有偶然发现,完全不可能发现   提及其用法的文档),这些的问题是   他们是'魔术'字符串,真的是一团糟(读:他们是黑客   在核心内部。)

     

所以他们不会以我们从v4中知道的形式回到v5。

所以,除了Linq仿制品有点被打破之外,简短的回答是这个(任何一种形式)不应该起作用(Athul的回答也不应该)。

答案很长,只有当您明确支持此属性作为文档类型的一部分时,才能使用此属性(以及其他类似属性)。但是,有一项功能请求要求“内置”umbraco...属性the words of Niels Hartvig

但是,我会亲自要求你不这样做;因为使用这些属性并依赖它们是有问题的(尤其是Neils自己提到的那一点)。制作适合他们任务的专用属性。

答案 1 :(得分:0)

你可以像

那样做
@foreach (var child in root.Children.Where("umbracoNaviHide != true &&  NodeTypeAlias == \"DocumentTypehere\" ")
{
    <li>@child.Name</li>   
}

答案 2 :(得分:0)

你可以写一下umbracoNaviHide的支票:

if (!child.umbracoNaviHide)
{
    continue;
}
<li>@child.Name</li>

答案 3 :(得分:0)

只是添加另一种方法 - 一些现有的答案对我不起作用 - 你可以试试这个。在Umbraco 4.11中为我工作

@foreach (var child in root.Children.Where(child => child.GetPropertyValue("umbracoNaviHide") == "0"))
{
..
}