2017-10-13 84 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,然後檢查了這個盒子,它完全適合我。我非常感謝你指引我朝着正確的方向前進。

相關問題