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)开始,动态支持(CurrentPage
在UmbracoTemplatePage
)据说会被删除。所以请使用ModelsBuilder
和UmbracoViewPage<MyModel>
进行准备。