2014-10-01 57 views
9

正如標題所說,我應該何時在Razor視圖中使用@Umbraco@CurrentPage@Model以從節點獲取屬性。Umbraco 7何時在Razor視圖中使用@Umbraco vs @CurrentPage vs @Model?

@Model.Content.GetPropertyValue()返回一個強類型對象,而@CurrentPage返回一個動態對象。然而,與@Umbraco我可以得到一個動態的(@Umbraco.Content())或強類型的對象(@Umbraco.TypedContent())。

可以@Umbraco幫手應該做的一切@CurrentPage@Model可以做什麼?我應該什麼時候使用哪個,爲什麼?

回答

15

你自己回答了你的大部分問題。 @Model@CurrentPage是相同的,但@CurrentPage是動態的。都返回當前頁面。這意味着,如果您從UmbracoViewPage中獲得您的意見,則不能使用@CurrentPage,因爲這僅適用於UmbracoViewTemplate。我個人喜歡@Model超過@CurrentPage,但它是個人選擇

@Umbraco是一個完全不同的野獸。它不返回當前頁面,但它有一堆方法以不同的方式獲取其他內容,媒體和成員(例如xpath)。而且模板和其它方法,如:

  • Umbraco.If(條件,trueValue [,falseValue])
  • Umbraco.Trunctate //限制文本大小
  • Umbraco.StripHtml //刪除HTML標籤
  • Umbraco.Search //全文搜索

要知道更多關於@Umbraco,請訪問Umbraco helper documentation

例如如果您使用

var imgId = @Model.Content.GetPropertyValue<string>("img") 

當前節點得到的圖像ID,那麼你可以使用@Umbraco.TypedMedia(imgId)來獲取圖像IPublishedContent對象。

更新: 下一步@ Umbraco.Field( 「propertyAlias」),這是模板的一個助手,你也可以使用@ Umbraco.Field(X, 「propertyAlias」),其中x是IPublishedContent。這將始終返回一個IHtmlString,這使得其他編程工作不切實際,但使Umbraco.Field()成爲一個非常好的幫助方法來返回屬性。

更新2: 從7.4版本開始,有一個模型構建器允許您定義UmbracoTemplatePage<ContentModels.HomePage>後來就用@Model.Content.BodyText。據稱從Umbraco v8(on the roadmap)開始,動態支持(CurrentPageUmbracoTemplatePage)據說會被刪除。所以請使用ModelsBuilderUmbracoViewPage<MyModel>進行準備。