2016-07-28 17 views
0

Ich habe gerade begonnen, umbraco 4 Tagen und ich bin mit diesem Problem stecken.Kann die Eigenschaften eines bestimmten Kind nicht abrufen Seite

Ich habe eine Seite namens "About Us", die ein Kind unter "Home" ist, und ich muss einige seiner Eigenschaften in der "Home" Seite erhalten.

Ich habe ein Teilansichts-Makro erstellt, um dies zu tun, aber ich bekomme den Fehler geladen Teilansicht Skript stattdessen.

Unten finden Sie meine Code:

@{ var selection = CurrentPage.Children.Where(x => x.Name == "aboutus"); } 

@if (selection.Any()) 
{ 
    <ul> 
     @foreach (var item in selection) 
     { 
      <div class="sc-inner"> 
       <h4> 
        @item.PageTitle</h4> 
       <p> 
        @Umbraco.Truncate(@item.mainAboutDescription, 100)</p> 
       <a class="btn btn-danger" href="@item.Url">Read More...</a> 
      </div> 
      break; 
     } 
    </ul> 
} 

Kann mir bitte jemand sagen, was mache ich falsch?

Vielen Dank im Voraus.

Bearbeitungen: Der Fehler auf der Website, die ich bekam, ist unten;

Fehler beim Laden des Teilansicht Skript (Datei: ~/Views/MacroPartials/homePage_aboutUsSection.cshtml)

+0

könnten Sie bitte den Fehler – Anth12

+0

@ Anth12, Vielen Dank für reponding posten. Bitte beachte die bearbeitete Frage. –

+0

Der Fehler wird von Umbraco mit einer generischen Nachricht unterdrückt (Fehler können aus der config/Umbraco.config aktiviert werden). Nur ein Kommentar, Sie haben 'div' Elemente in einer' ul' verschachtelt, Sie sollten stattdessen 'li' verwenden oder die' ul' ändern. – Anth12

Antwort

2

die partielle Unter der Annahme, erbt UmbracoTemplatePage die CurrentPage Eigenschaft ist ein dynamic, Sie nicht Lambda-Ausdrücke als Argument für eine dynamisch verwenden können versandter Vorgang

Wenn Sie Linq verwenden, um die Inhalte Model.Content abzufragen verwenden, anstatt CurrentPage was ein IPublishedContent z.B.

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); } 

Hinweis: Die Name Eigenschaft wird die Dokumente Namen wie im CMS höchstwahrscheinlich eingegeben ‚Über uns‘ statt ‚aboutus‘

Mit dem über zurückkehren wird eine IEnumerable<IPublishedContent> zurückkehren, so dass Sie brauchen die GetPropertyValue Methode zu verwenden, anstatt den Inhalt dynamisch Zugriff:

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage 

@{ var selection = Model.Content.Children.Where(x => x.Name == "aboutus"); } 

@if (selection.Any()) 
{ 
    <ul> 
     @foreach (var item in selection) 
     { 
      <li class="sc-inner"> 
       <h4> 
        @item.GetPropertyValue("pageTitle") 
       </h4> 
       <p> 
        @Umbraco.Truncate(@item.GetPropertyValue<string>("mainAboutDescription"), 100) 
       </p> 
       <a class="btn btn-danger" href="@item.Url">Read More...</a> 
      </li> 
      break; 
     } 
    </ul> 
} 
+0

Oh, vielen Dank für Ihre Erklärung. Ich stehe in deiner Schuld. Und der Punkt, wo Sie die Namenseigenschaft erwähnten, konnte als "Über uns" und nicht "aboutus" zurückgegeben werden, wie ich vorher angegeben habe, gearbeitet. Tausend Dank. –

+0

Großartig, kein Problem. – Anth12

2

Sehr schlechte Praxis die Eigenschaft Name zu verwenden, um in Ihrem c abfragt ode - was, wenn jemand den Namen zum Beispiel zu About ändert. Dein Code würde kaputt gehen. Wenn es etwas anderes gibt, das auf dem Knoten einzigartig ist, wäre es besser.

Zum Beispiel, wenn Sie einen aboutUs Dokumenttyp für Ihre über uns Seite haben Sie nutzen könnten:

Model.Content.Children.Where(x => x.DocumentTypeAlias == "exactNameOfYourDocTypeAliasHere") 

oder, wenn auch nicht so robust könnte dazu verwendet werden, die ID der Seite.

Model.Content.Children.Where(x => x.Id == 1234) 

Die ID ist weit weniger wahrscheinlich, als der Name einer Schlüsselseite wie folgt zu ändern.

Ich würde in der Regel nicht die Id entweder im Code verwenden, aber es ist viel besser als Name