umbracoNaviHide 不适用于新项目

umbracoNaviHide doesn't work on new project

我最近的所有项目都在 True/False 属性 中实现了 umbracoNaviHide,它们都运行良好。在我的 7.6.9 升级项目中,我根本无法使用 True/False 值。

在我的主作文中,我有一个 "Navigation" 选项卡和一个 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。我确实重新启动了项目。我确实删除了 属性 并重新添加了它。我基本上什么都试过了,就是不行。

到底是什么?

更新:看看这个。这太奇怪了:

@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 Umbracohttps://our.umbraco.org/projects/developer-tools/umbraco-v6-mvc-razor-cheatsheets.

我无法发表评论,所以我将 post 作为答案。我遇到过同样的问题。在我的例子中,我将默认值设置为选中,我认为这是真的。我将默认设置为未选中。我去了 umbracoNaviHide,然后选中了复选框,它非常适合我。非常感谢您为我指明了正确的方向。