2017-10-13 67 views
0

我最近的所有项目都在True/False属性中实现了umbracoNaviHide,并且它们都可以正常工作。在我的7.6.9升级项目中,我根本无法获得True/False值。umbracoNaviHide不适用于新项目

在我的主作文中,我有一个“导航”选项卡以及True/False属性。我的所有页面都通过这个组合继承。

当我做这样的事情:

var menuItems = CurrentPage.Site().Children; 

@foreach(var item in menuItems) { 
    if(item.IsVisible()) { 
     <!--show element--> 
    } 
} 

它不工作。它应该像我所有最新的项目一样工作。这是我已经尝试过的:

var menuItems = CurrentPage.Site().Children.Where("Visible"); 
var menuItems = CurrentPage.Site().Children.Where("umbracoNaviHide == false"); //setting this to true gives me no results 
var menuItems = CurrentPage.Site().Children.Where(x => x.IsVisible()); 
var menuItems = CurrentPage.Site().Children.Where("randomProperty == false"); //or true 

foreach(var item in menuItems) { 
    if(!item.HasValue("umbracoNaviHide)) { <!-- show item --> } 
    if(item.GetPropertyValue("umbracoNaviHide")) == "false") { <!-- show item --> } 
} 

我认为就是这样。我更新了我的ModelsBuilder。我确实重启了这个项目。我确实删除了财产并读了它。我基本上都试过了,但它不起作用。

究竟是什么?

更新:看看这个。这是soooooooooooooooooooooooooooooooooooo怪异:

@foreach(var item in menuItems) { 
    <p>@item.GetPropertyValue("umbracoNaviHide") - @item.Name</p> 
} 

这使我有以下几点:

FALSE - Our offers 
FALSE - Technology 
TRUE - Projects 
FALSE - About us 
FALSE - Gallery 
TRUE - Contact 

然而,这是umbracoNaviHide是如何设置的后台:

Ticked - Our offers 
Not ticked - Technology 
Ticked - Projects 
Not ticked - About us 
Not ticked - Gallery 
Ticked - Contact 

飞行到底是怎么这可能吗?

+0

所以你想列出根本不存在的孩子? :)你可以随时检查Children.Any(x => x.IsVisible())或类似的。所以它解决了? –

+0

@MarcinZajkowski呃不,我想使用umbracoNaviHide创建我应该显示/隐藏的元素菜单,取决于该属性的值。 – MortenMoulder

+0

你可以试试带孩子(x => x.IsVisible())吗? –

回答

1

好了,一切都清楚了吧:)

您使用动态对象和你试图把他们当作IPublishedContent。如果他们没有正确映射它表现奇怪和不可预测。

动态物体将在下面的一把umbraco版本中删除,我建议使用强类型IPublishedContent对象或采取ModelsBuilder优势,在特定类型的生成的模型进行操作。

我的测试代码如下。这两个版本都在我的测试7.6.9解决方案中工作

// Dynamic object version - will be deprecated - don't use! 
//var visibleChildItems = CurrentPage.Site().Children.Where("Visible"); 

// Strongly Typed version - suggested 
var visibleChildItems = Model.Content.Site().Children(x => x.IsVisible()); 

<ul> 
    @foreach (var item in visibleChildItems) 
    { 
     <li> 
      <a href="@item.Url">@item.Name</a> 
     </li> 
    } 
</ul> 

希望它能解决您的问题。如果您对通过动态对象进行操作以及如何从中获取属性感兴趣,请检查一下有点旧但仍然有效的Razor Cheetsheet for Umbracohttps://our.umbraco.org/projects/developer-tools/umbraco-v6-mvc-razor-cheatsheets

+0

我不明白你如何写这个答案。我明确地写了一条评论,它不适合我。它甚至列在我尝试过的很多例子中。我试图将它们视为动态和IPublishedContent,正如您在我的示例中可以清楚地看到的那样。我已经尝试了两种。如果你需要作出回答,至少想出一些新的东西。 – MortenMoulder

+0

我将它作为答案将代码示例放在那里。那么你必须在别的地方做错事。我无法在动态对象上调用Children.Where(x => ...),所以我不知道如何在代码中执行此操作。与您的示例中为动态对象调用的IPublishedContent的扩展方法相同。您的缓存可能有问题?你重新发布了整个网站吗?它照常为我工作。如果你愿意,我可以从这个例子中分享我的代码。 –

+0

我确实重新发布了整个网站。你能告诉我你的文档类型和内容节点结构吗? – MortenMoulder

1

我不能留下评论,所以我会发布这个答案。我遇到过同样的问题。在我的情况下,我有默认值设置为检查,我认为是真实的。我将默认设置为未选中。我去了umbracoNaviHide,然后检查了这个盒子,它完全适合我。我非常感谢你指引我朝着正确的方向前进。

相关问题