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