umbracoNaviHide不适用于新项目
我最近的所有项目都在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
飞行到底是怎么这可能吗?
好了,一切都清楚了吧:)
您使用动态对象和你试图把他们当作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 Umbraco:https://our.umbraco.org/projects/developer-tools/umbraco-v6-mvc-razor-cheatsheets。
我不明白你如何写这个答案。我明确地写了一条评论,它不适合我。它甚至列在我尝试过的很多例子中。我试图将它们视为动态和IPublishedContent,正如您在我的示例中可以清楚地看到的那样。我已经尝试了两种。如果你需要作出回答,至少想出一些新的东西。 – MortenMoulder
我将它作为答案将代码示例放在那里。那么你必须在别的地方做错事。我无法在动态对象上调用Children.Where(x => ...),所以我不知道如何在代码中执行此操作。与您的示例中为动态对象调用的IPublishedContent的扩展方法相同。您的缓存可能有问题?你重新发布了整个网站吗?它照常为我工作。如果你愿意,我可以从这个例子中分享我的代码。 –
我确实重新发布了整个网站。你能告诉我你的文档类型和内容节点结构吗? – MortenMoulder
我不能留下评论,所以我会发布这个答案。我遇到过同样的问题。在我的情况下,我有默认值设置为检查,我认为是真实的。我将默认设置为未选中。我去了umbracoNaviHide,然后检查了这个盒子,它完全适合我。我非常感谢你指引我朝着正确的方向前进。
所以你想列出根本不存在的孩子? :)你可以随时检查Children.Any(x => x.IsVisible())或类似的。所以它解决了? –
@MarcinZajkowski呃不,我想使用umbracoNaviHide创建我应该显示/隐藏的元素菜单,取决于该属性的值。 – MortenMoulder
你可以试试带孩子(x => x.IsVisible())吗? –