2016-07-28 23 views
0

我剛剛在4天前開始使用umbraco,並且我遇到了這個問題。無法獲取特定子項的屬性頁面

我有一個名爲"About Us"的頁面,該頁面是"Home"下的子項,我需要在"Home"頁面中獲取它的一些屬性。

我創建了一個局部視圖宏來做到這一點,但我得到的錯誤是加載部分視圖腳本。

下面是我的代碼:

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

有人能告訴我什麼,我做錯了什麼?

在此先感謝。

編輯: 我在網站上的錯誤是在下面;

錯誤加載局部視圖腳本(文件:〜/查看/ MacroPartials/homePage_aboutUsSection.cshtml)

+0

更好,你可以請張貼錯誤 – Anth12

+0

@ Anth12,感謝reponding。請參閱編輯的問題。 –

+0

Umbraco用一條通用消息來處理錯誤(錯誤可以從config/Umbraco.config中啓用)。只是一個評論,你有嵌套在'ul'中的'div'元素,你應該使用'li'或者改變'ul'。 – Anth12

回答

2

假設部分是繼承UmbracoTemplatePageCurrentPage屬性是dynamic,您不能使用lambda表達式作爲參數傳遞給動態調度運行。

如果您希望使用Linq查詢內容使用Model.Content而不是CurrentPage這是一個IPublishedContent例如,

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

注:Name屬性將返回作爲CMS最有可能進入「關於我們」,而不是「關於我們」

使用約將返回IEnumerable<IPublishedContent>的文件名,所以你需要使用GetPropertyValue方法,而不是動態的訪問內容:

@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

噢,非常感謝你的解釋。我在你的債務。而且,您提到名稱屬性的點可能會返回爲「關於我們」,而不是我之前指定的「aboutus」。感謝十億。 –

+0

好,沒問題。 – Anth12

2

非常不好的做法,使用名稱屬性在C查詢頌 - 如果有人將名稱更改爲About例如。你的代碼會中斷。如果在節點上還有別的東西,那麼它會更好。

例如,如果您有關於我們的文檔類型爲您的公司簡介頁面,你可以使用:

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

,或者雖然沒有如此強勁,頁面編號都可以使用。

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

這個ID比這樣的關鍵頁面的名稱更不可能改變。

在代碼中,我通常不會使用ID要麼但它遠遠超過名稱