我设法使用以下语法获取媒体网址:
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 @
输出相同的整数值 - 语法,对吗?
答案 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.