使用GetProperty语法在Umbraco 7中获取媒体网址

时间:2015-07-28 05:44:42

标签: c# razor umbraco umbraco7

我设法使用以下语法获取媒体网址:

Umbraco.Media(CurrentPage.MyImage).Url

但是,当我使用GetProperty语法尝试相同时(奇怪的是,我在网上使用了getProperty一段时间,但是语法总是返回一些空的动态对象),这对于其他属性,我得到各种铸造错误:

// results in:
// System.InvalidOperationException: The value of parameter 'id' must 
// be either a string or an integer

Umbraco.Media(CurrentPage.GetProperty("myImage")).Url

// or
Umbraco.Media(CurrentPage.GetProperty("_myImage")).Url

使用某种形式的Umbraco.TypedContent<Media>导致更多NRE和投射错误。我最终尝试了以下内容,但总是返回一个空列表:

Umbraco.Media("myImage","umbracoFile")

我不介意使用动态语法或任何其他语法,但我很惊讶GetProperty显然返回的内容与动态语法不同。

最终,我想要的是使用_propName语法(下划线 - 前缀名称)来获取此属性或任何父页面的属性,无论设置哪个。如果没有查询AncestorOrSelf页面列表,是否有一些方法可以使用&#34;简单&#34;语法?

快速更新 如果我@CurrentPage.GetProperty("_defaultBackgroundImage"),我会在HTML中看到媒体ID,但当我尝试将其提供给Umbraco.Media时,我会获得InvalidOperationException 参数&#39; id&#的值39;必须是字符串或整数。转换为int会导致无效转换并使用ToString返回类型名称。必须有某种方法可以获得我使用Razor @输出相同的整数值 - 语法,对吗?

1 个答案:

答案 0 :(得分:2)

From the comments above:

What you are looking for is getting the property value recursively.

Since you are using umbraco 7 instead of accessing CurrentPage that is of type dynamic I would suggest you use strongly typed Model.Content property which is of type IPublishedContent.

Than intellisense will tell you all the methods available, one of which is:

Umbraco.TypedMedia(Model.Content.GetPropertyValue<int>("myImage", recursive: true, ifCannotConvert: 0))

and it will work.

The same goes for Model.Content.GetProperty method.