2017-04-11 27 views
0

我試圖在Umbraco中將頁面作爲參數傳遞。並在助手中,我需要頁面的一些屬性。如姓名,...在Umbraco中使用頁面作爲參數

這是我的代碼:

var PageWeAreInheritedFrom = CurrentPage; 
    @ShowBanner(PageWeAreInheritedFrom); 

@helper ShowBanner(dynamic pageWeRIn) 
{ 
if (pageWeRIn.bannerIsInherited) 
{ 
     @ShowBanner(pageWeRIn.Parent) 
} 
else 
{ 
    //here I want to have a switch case based on pageWeRIn.Name 
    //but I cant have it. 
} 
} 

這是錯誤。 似乎網頁類型是在輔助方法

開關表達或case標籤不同必須是一個布爾,焦炭,字符串 積分,枚舉或相應的空類型

+0

該錯誤可能意味着因爲pageWeRIn是動態的切換不知道哪些數據類型pageWeRIn.Name是。如果你嘗試將pageWeRIn.Name放入一個字符串變量,然後根據它進行切換? –

+0

@JannikAnker不知道爲什麼它不能包裝在字符串 –

回答

0

這是原因是pageWeRIn是動態的,C#的切換不能使用動態變量。我個人認爲我的觀點不適用於動態,但只適用於打字的模型。欲瞭解更多信息,請參閱:http://24days.in/umbraco-cms/2015/strongly-typed-vs-dynamic-content-access/

類型化的實現看起來somehthing像這樣(未測試):

@ShowBanner(Mode.Content); 

@helper ShowBanner(IPublishedContent pageWeRIn) 
{ 
    if (pageWeRIn.GetPropertyValue<bool>("bannerIsInherited")) 
    { 
     @ShowBanner(pageWeRIn.Parent) 
    } 
    else 
    { 
     //use all the switches you want on pageWeRIn.Name 
    } 
} 

另一種方式來做到這一點不改變整個代碼將引入真實鍵入一個新的變量(如Jannik在他的評論中解釋的),然後使用一個開關

string nodeName = pageWeRIn.Name 
switch(nodeName){ 
    // whatever 
} 
+0

謝謝你的解決方案。你的意思是我最好使用IPublishedContent來保持CurrentPage變量? –

+0

CurrentPage只是Model.Content的動態表示。動態更慢,CPU更密集,因爲它們在運行時被解析,因此在我看來最好使用輸入對象(通過UmbracoHelper)。特別是當你在visual studio中開發時(使用intellisense)。如果您在Umbraco後端編輯器(網頁)中進行編輯,由於查詢生成器,CurrentPage可能非常方便,但我個人從未使用過。 – Mark