2017-10-13 1 views
0

Alle meine letzten Projekte hat UmbracoNaviHide innerhalb einer True/False-Eigenschaft implementiert, und sie alle funktionieren gut. In meinem 7.6.9 aktualisierten Projekt kann ich einfach keinen True/False-Wert erhalten.UmbracoNaviHide funktioniert nicht auf neues Projekt

Auf meiner Master-Komposition habe ich eine Registerkarte "Navigation" zusammen mit einer True/False-Eigenschaft. Alle meine Seiten erben durch diese Komposition.

Wenn ich so etwas wie:

var menuItems = CurrentPage.Site().Children; 

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

Es funktioniert nicht. Es sollte funktionieren, wie es bei all meinen neuesten Projekten der Fall ist. Hier ist, was ich versucht habe:

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 --> } 
} 

Ich denke, das ist alles. Ich habe meinen ModelsBuilder aktualisiert. Ich habe das Projekt neu gestartet. Ich habe das Eigentum entfernt und es gelesen. Ich habe grundsätzlich alles versucht, aber es wird einfach nicht funktionieren.

Was in aller Welt?

UPDATE: Überprüfen Sie dies. Dies ist soooooooooooooooooooooooooooooooooooo seltsam:

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

Das gibt mir folgende:

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

Dies ist jedoch, wie die umbracoNaviHide ist Setup im Back-Office:

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

Wie die fliegenden Hölle das möglich?

+0

Sie wollten also Kinder auflisten, die gar nicht existieren? :) Sie können immer nach Children.Any (x => x.IsVisible()) oder ähnlichem suchen. Also ist es gelöst? –

+0

@MarcinZajkowski Uh nein, ich möchte die UmbracoNaviHide verwenden, um ein Menü mit Elementen zu erstellen, die abhängig vom Wert der Eigenschaft angezeigt/ausgeblendet werden sollen. – MortenMoulder

+0

Können Sie versuchen, die Kinder mit .Children (x => x.IsVisible()) zu nehmen? –

Antwort

1

Ok, alles klar jetzt :)

Sie verwenden dynamische Objekte und Sie versuchen, sie als IPublishedContent zu behandeln. Wenn sie nicht korrekt zugeordnet sind, verhalten sie sich merkwürdig und unberechenbar.

Als dynamische Objekte in den folgenden Umbraco Versionen entfernt werden, schlage ich stark IPublishedContent typisierte Objekte zu nutzen oder nutzen ModelsBuilder nehmen und auf generierten Modellen bestimmter Arten betrieben werden.

Mein Testcode ist unten. Beide Versionen funktionieren in meiner Testlösung 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> 

Ich hoffe, es wird Ihr Problem lösen. Wenn Sie daran interessiert sind, durch dynamische Objekte zu arbeiten und Eigenschaften von ihnen zu erhalten, überprüfen Sie ein wenig alt, aber immer noch gültig Razor Cheetsheet für Umbraco: .

+0

Ich verstehe nicht, wie Sie das als Antwort schreiben können. Ich habe eindeutig als Kommentar geschrieben, dass es bei mir nicht funktioniert. Es ist sogar in meinen vielen Beispielen aufgelistet, die ich ausprobiert habe. Ich versuche, sie sowohl als dynamisch als auch als IP-publishedContent zu behandeln, wie Sie in meinen Beispielen deutlich sehen können. Ich habe beides ausprobiert. Wenn Sie eine Antwort brauchen, dann sollten Sie sich zumindest etwas Neues einfallen lassen. – MortenMoulder

+0

Ich teilte es als eine Antwort, um Codebeispiele dort zu platzieren. Du musst dann irgendwo anders was falsch gemacht haben. Ich kann Children.Where (x => ...) nicht auf dynamischem Objekt aufrufen, daher weiß ich nicht, wie Sie es in Ihrem Code tun. Gleiches gilt für Erweiterungsmethoden für IPublishedContent, die in Ihrem Beispiel für dynamische Objekte aufgerufen werden. Vielleicht stimmt etwas mit deinem Cache nicht? Haben Sie die gesamte Website erneut veröffentlicht? Es funktioniert wie immer für mich. Ich kann meinen Code von diesem Beispiel teilen, wenn Sie möchten. –

+0

Ich habe die gesamte Website ja veröffentlicht. Können Sie mir bitte Ihre Dokumenttyp- und Content-Node-Struktur zeigen? – MortenMoulder

1

Ich kann keinen Kommentar hinterlassen, also werde ich dies als Antwort posten. Ich hatte das gleiche Problem. In meinem Fall hatte ich den Standardwert auf checked gesetzt, was ich für richtig hielt. Ich setze den Standard auf unmarkiert. Ich ging zu UmbracoNaviHide und dann überprüfte die Box und es funktionierte perfekt für mich. Ich danke dir, dass du mich in die richtige Richtung weist.