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

时间:2014-10-01 12:53:57

标签: umbraco

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

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

@Umbraco帮助可以执行@CurrentPage@Model可以执行的所有操作吗?我什么时候应该使用哪个,为什么?

1 个答案:

答案 0 :(得分:16)

你自己回答了大部分问题。 @Model@CurrentPage是相同的,只有@CurrentPage是动态的。两者都返回当前页面。这意味着,如果您从UmbracoViewPage插入视图,则无法使用@CurrentPage,因为这仅适用于UmbracoViewTemplate。我个人比@Model更喜欢@CurrentPage,但这是个人选择

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

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

要了解有关@Umbraco的更多信息,请访问Umbraco helper documentation

E.g。如果您使用

从当前节点获得了图像ID
var 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)据说会被删除。因此,请使用ModelsBuilderUmbracoViewPage<MyModel>进行准备。

更新3: 从版本8开始,将只有UmbracoViewPage。这意味着CurrentPage将不再可用。尝试使用&#34;模型构建器&#34;方法是未来证明或read the first v8 documentation about this topic