2017-10-13 7 views
0

私の最近のプロジェクトでは、すべてTrue/Falseプロパティの中にumbracoNaviHideが実装されています。私の7.6.9アップグレードされたプロジェクトでは、真実/偽の価値を得ることができません。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を更新しました。私はプロジェクトを再開しました。私はプロパティを削除してreaddしました。私は基本的にすべてを試しましたが、うまく動作しません。

何が地球上にありますか?

更新:これをチェックしてください。これは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 Uh no、umbracoNaviHideを使用して、そのプロパティの値に応じて表示/非表示にする要素のメニューを作成したいと考えています。 – MortenMoulder

+0

.Children(x => x.IsVisible())を使って子どもを連れてみることはできますか? –

答えて

1

[OK]を、すべての:)

あなたはダイナミックオブジェクトを使用していて、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> 

あなたの問題を解決することを願っています。ダイナミックなオブジェクトを操作する方法とプロパティを取得する方法について興味がある場合は、もう少し古いものの、有効であることを確認してください。Umbracoのレイザーチェットシートhttps://our.umbraco.org/projects/developer-tools/umbraco-v6-mvc-razor-cheatsheets

+0

答えとしてどのように書くことができるのか分かりません。私はコメントとして、それが私にとってはうまくいかないことを明確に書きました。私が試した多くの例にもリストされています。私はあなたが私の例ではっきりとわかるように、それらを動的とIPublishedContentの両方として扱おうとしています。私は両方を試しました。答えが必要な場合は、少なくとも新しいものを考えてください。 – MortenMoulder

+0

私はコードサンプルをそこに置く答えとして共有しました。あなたは何か間違ったことをしなければなりません。私はChildrenを呼び出すことができません。動的オブジェクトのどこに(x => ...)、あなたのコードでそれをやっているのか分かりません。あなたの例では、動的オブジェクトを呼び出すIPublishedContentの拡張メソッドと同じです。おそらく何かがあなたのキャッシュに間違っていますか?ウェブサイト全体を再公開しましたか?それはいつものように私のために働く。私が望むなら、この例のコードを共有することができます。 –

+0

私はサイト全体を再公開しました。ドキュメントタイプとコンテンツノードの構造を教えてください。 – MortenMoulder

1

私はコメントを残すことができないので、これを回答として投稿します。私も同じ問題がありました。私の場合は、デフォルト値をチェックするように設定していましたが、これは当てはまりました。私はデフォルトを未チェックに設定しました。私はumbracoNaviに行って箱をチェックし、それは私のために完璧に働いた。私は正しい方向に向いてくれてありがとう。

関連する問題