Umbraco 7什么时候在Razor视图中使用@Umbraco vs @CurrentPage vs @Model?

Iai*_*ain 9 umbraco

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

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

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

dam*_*pee 16

你自己回答了大部分问题. @Model并且@CurrentPage是相同的,除了@CurrentPage是动态的.两者都返回当前页面.这意味着,如果您从中查看视图UmbracoViewPage,则无法使用,@CurrentPage因为这仅适用于UmbracoViewTemplate.就个人而言,我@Model更喜欢@CurrentPage,但这是个人选择

@Umbraco是一个完全不同的野兽.它不返回当前页面,但它有一堆方法以不同的方式获取其他内容,媒体和成员(例如xpath).但也有模板和misc方法,如:

  • Umbraco.If(condition,trueValue [,falseValue])
  • Umbraco.Trunctate //限制文字大小
  • Umbraco.StripHtml //删除html标签
  • Umbraco.搜索//全文搜索

要了解有关@Umbraco的更多信息,请访问Umbraco帮助文档

例如,如果您使用当前节点获得图像ID

var imgId =  @Model.Content.GetPropertyValue<string>("img")
Run Code Online (Sandbox Code Playgroud)

然后你可以@Umbraco.TypedMedia(imgId)用来获取图像IPublishedContent对象.

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

更新2: 从7.4版开始,有一个modelBuilder,允许您稍后定义 UmbracoTemplatePage<ContentModels.HomePage>和使用@Model.Content.BodyText.从Umbraco v8开始(在路线图上),据说对动态(CurrentPageon UmbracoTemplatePage)的支持被取消.所以准备使用ModelsBuilderUmbracoViewPage<MyModel>.

更新3: 从版本8开始,将只有一个UmbracoViewPage.这意味着CurrentPage将不再可用.尝试使用"模型构建器"方法作为未来证明或阅读有关此主题的第一个v8文档.