Umbraco 7何时在Razor视图中使用@Umbraco vs @CurrentPage vs @Model?

问题描述:

正如标题所说,我应该何时在Razor视图中使用@Umbraco@CurrentPage@Model以从节点获取属性。Umbraco 7何时在Razor视图中使用@Umbraco vs @CurrentPage vs @Model?

@Model.Content.GetPropertyValue()返回一个强类型对象,而@CurrentPage返回一个动态对象。然而,与@Umbraco我可以得到一个动态的(@Umbraco.Content())或强类型的对象(@Umbraco.TypedContent())。

可以@Umbraco帮手应该做的一切@CurrentPage@Model可以做什么?我应该什么时候使用哪个,为什么?

你自己回答了你的大部分问题。 @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>进行准备。