使用 GetProperty 语法在 Umbraco 7 中获取媒体 url
Get media url in Umbraco 7 using GetProperty syntax
我设法使用以下语法获取我的媒体 URL:
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
显然 returns 与动态语法有所不同。
最终,我想要的只是使用 _propName
语法(下划线前缀名称)来获取此页面或任何父页面的 属性,以设置者为准。除了查询 AncestorOrSelf
页面列表之外,是否有某种方法可以使用 "simple" 语法使其工作?
更新快
如果我这样做 @CurrentPage.GetProperty("_defaultBackgroundImage")
,我会在 HTML 中看到媒体 ID,但是当我尝试将其提供给 Umbraco.Media
时,我会得到 InvalidOperationException
参数的值'id' 必须是字符串或整数。强制转换为 int
会给出无效的强制转换并使用 ToString
returns 类型名称。一定有某种方法可以取回我在使用 Razor @
-syntax 输出时看到的相同整数值,对吗?
来自以上评论:
您正在寻找的是递归地获取 属性 值。
由于您使用的是 umbraco 7
而不是访问类型为 dynamic
的 CurrentPage
我建议您使用强类型 Model.Content
属性 这是类型 IPublishedContent
。
然后 intellisense 会告诉您所有可用的方法,其中之一是:
Umbraco.TypedMedia(Model.Content.GetPropertyValue<int>("myImage", recursive: true, ifCannotConvert: 0))
它会起作用。
Model.Content.GetProperty
方法也是如此。
我设法使用以下语法获取我的媒体 URL:
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
显然 returns 与动态语法有所不同。
最终,我想要的只是使用 _propName
语法(下划线前缀名称)来获取此页面或任何父页面的 属性,以设置者为准。除了查询 AncestorOrSelf
页面列表之外,是否有某种方法可以使用 "simple" 语法使其工作?
更新快
如果我这样做 @CurrentPage.GetProperty("_defaultBackgroundImage")
,我会在 HTML 中看到媒体 ID,但是当我尝试将其提供给 Umbraco.Media
时,我会得到 InvalidOperationException
参数的值'id' 必须是字符串或整数。强制转换为 int
会给出无效的强制转换并使用 ToString
returns 类型名称。一定有某种方法可以取回我在使用 Razor @
-syntax 输出时看到的相同整数值,对吗?
来自以上评论:
您正在寻找的是递归地获取 属性 值。
由于您使用的是 umbraco 7
而不是访问类型为 dynamic
的 CurrentPage
我建议您使用强类型 Model.Content
属性 这是类型 IPublishedContent
。
然后 intellisense 会告诉您所有可用的方法,其中之一是:
Umbraco.TypedMedia(Model.Content.GetPropertyValue<int>("myImage", recursive: true, ifCannotConvert: 0))
它会起作用。
Model.Content.GetProperty
方法也是如此。