c# - 使用 GetProperty 语法在 Umbraco 7 中获取媒体 url

标签 c# razor umbraco umbraco7

我设法使用以下语法获取我的媒体 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/

相关文章:

c# - 如果存在两个具有相似 SSID 的 WiFi 网络,您如何在代码中区分两者?

c# - 不使用 AJAX 重新加载 ASP.NET MVC3 局部 View

c# - 如果字典键为可为空的十进制,则 Mvc SelectList 不绑定(bind)

Umbraco 7 - Umbraco 文档类型的只读属性

asp.net - Umbraco 前端的 Oauth 授权

Umbraco v 4.7.1.1 加载缓慢

c# - 锁的范围是什么?

c# - UI 线程上的任务延续

c# - C#中构造OutOfMemoryException没有内存时会发生什么?

razor - 如何使用 WebImage 在 Umbraco 中创建缩略图? (带 Razor )