我使用以下语法成功获取了我的媒体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.Media(((Umbraco.Core.Models.IPublishedProperty)CurrentPage.GetProperty("_myImage")).Value).Url
让它工作了,但这似乎不太对。如果没有强制转换,我会得到一个“对象不包含 'Value' 方法或属性”的错误。我以为返回的对象是一个动态对象,但显然不是。仍然在想这是不是只是我不理解 Umbraco,Umbraco 框架中的疏忽,还是“按设计”而应该接受它。 - AbelCurrentPage.GetPropertyValue<int>("_myImage"))
? - Davor Zlotrg0
。看起来下划线语法在GetPropertyValue<>
中不起作用。如果我去掉下划线,它可以工作,但那不是我想要的。 - AbelCurrentPage.GetPropertyValue<int>("myImage", recursive: true, ifCannotConvert: string.Empty)
。 - Davor Zlotrg_propValue
语法的递归特性在GetPropertyValue<>
中不起作用,但在GetProperty
中起作用吗?还是Umbraco 7中有所改变?它可以通过第二个参数设置为true
来实现。 - Abel