正如标题所说,我应该何时在Razor视图中使用@Umbraco
,@CurrentPage
或@Model
来获取节点中的属性。
@Model.Content.GetPropertyValue()
返回强类型对象,而@CurrentPage
返回动态对象。但是,使用@Umbraco
我可以获得动态(@Umbraco.Content()
)或强类型对象(@Umbraco.TypedContent()
)。
@Umbraco
帮助可以执行@CurrentPage
和@Model
可以执行的所有操作吗?我什么时候应该使用哪个,为什么?
答案 0 :(得分:16)
你自己回答了大部分问题。 @Model
和@CurrentPage
是相同的,只有@CurrentPage
是动态的。两者都返回当前页面。这意味着,如果您从UmbracoViewPage
插入视图,则无法使用@CurrentPage
,因为这仅适用于UmbracoViewTemplate
。我个人比@Model
更喜欢@CurrentPage
,但这是个人选择
@Umbraco
是一个完全不同的野兽。它不返回当前页面,但它有一堆方法以不同的方式获取其他内容,媒体和成员(例如xpath)。但也有模板和misc方法,如:
要了解有关@Umbraco的更多信息,请访问Umbraco helper documentation
E.g。如果您使用
从当前节点获得了图像IDvar imgId = @Model.Content.GetPropertyValue<string>("img")
然后您可以使用@Umbraco.TypedMedia(imgId)
来获取图像IPublishedContent对象。
<强>更新强> 在@ Umbraco.Field(&#34; propertyAlias&#34;)旁边,它是模板助手之一,您也可以使用@ Umbraco.Field(x,&#34; propertyAlias&#34;),其中x是IPublishedContent。这将始终返回一个IHtmlString,这使得它对其他编程工作不切实际,但使Umbraco.Field()成为一个非常好的帮助方法来返回属性。
更新2:
从版本7.4开始,有一个modelBuilder,允许您定义UmbracoTemplatePage<ContentModels.HomePage>
并稍后使用@Model.Content.BodyText
。从Umbraco v8(on the roadmap)开始,对动力学的支持(CurrentPage
上的UmbracoTemplatePage
)据说会被删除。因此,请使用ModelsBuilder
和UmbracoViewPage<MyModel>
进行准备。
更新3:
从版本8开始,将只有UmbracoViewPage
。这意味着CurrentPage
将不再可用。尝试使用&#34;模型构建器&#34;方法是未来证明或read the first v8 documentation about this topic。