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

Umbraco 7在Razor视图中何时使用@Umbraco vs@CurrentPage vs@Model?,umbraco,Umbraco,正如标题所述,我应该在Razor视图中何时使用@Umbraco、@CurrentPage或@Model从节点获取属性 @Model.Content.GetPropertyValue()返回强类型对象,而@CurrentPage返回动态对象。但是,使用@Umbraco我可以获得动态(@Umbraco.Content())或强类型对象(@Umbraco.TypedContent()) @Umbracohelper能做@CurrentPage和@Model能做的一切吗?我应该在什么时候使用,为什么使用

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

@Model.Content.GetPropertyValue()
返回强类型对象,而
@CurrentPage
返回动态对象。但是,使用
@Umbraco
我可以获得动态(
@Umbraco.Content()
)或强类型对象(
@Umbraco.TypedContent()


@Umbraco
helper能做
@CurrentPage
@Model
能做的一切吗?我应该在什么时候使用,为什么使用?

你自己回答了大部分问题
@Model
@CurrentPage
是相同的,只是
@CurrentPage
是动态的。两者都返回当前页面。这意味着,如果您从
UmbracoViewPage
访问视图,则不能使用
@CurrentPage
,因为这仅在
UmbracoViewTemplate
上可用。我个人喜欢
@Model
多于
@CurrentPage
,但这是我个人的选择

@Umbraco
是一只完全不同的野兽。它不返回当前页面,但它有一系列方法以不同的方式(例如xpath)获取其他内容、媒体和成员。还包括模板和杂项方法,如:

  • Umbraco.If(条件,真值[,假值])
  • Umbraco.Trunctate//限制文本大小
  • Umbraco.StripHtml//删除html标记
  • Umbraco.Search//全文搜索
要了解有关@Umbraco的更多信息,请访问

例如,如果使用从当前节点获取图像ID

var imgId =  @Model.Content.GetPropertyValue<string>("img")
var imgId=@Model.Content.GetPropertyValue(“img”)
然后,您可以使用
@Umbraco.TypedMedia(imgId)
获取图像IPublishedContent对象

更新: 在作为模板帮助程序之一的@Umbraco.Field(“propertyAlias”)旁边,您还可以使用@Umbraco.Field(x,“propertyAlias”),其中x是IPPublishedContent。这将始终返回一个IHtmlString,这使得它对于其他编程工作来说不切实际,但使Umbraco.Field()成为返回属性的非常好的辅助方法

更新2: 从7.4版开始,有一个modelBuilder,允许您定义
UmbracoTemplatePage
并在以后使用
@Model.Content.BodyText
。从Umbraco v8()开始,对动力学的支持(
Umbraco模板页
上的
CurrentPage
)据说已被取消。因此,请使用
ModelsBuilder
UmbracoViewPage
进行准备

更新3: 从版本8开始,将只有一个
UmbracoViewPage
。这意味着
CurrentPage
将不再可用。尝试使用“models builder”方法来证明未来的可靠性