如何在Umbraco中从LeBlender编辑器的嵌套内容中取值?
如何从LeBlender的嵌套属性中获取并输出具体值?
你现在看到的System.Collections.Generic.List1[Umbraco.Core.Models.IPublishedContent]`是因为直接输出了整个列表对象,而没有遍历里面的具体内容项。别担心,这是新手接触Umbraco嵌套属性时很常见的问题,我来帮你改改代码:
首先,item.GetValue("checkpointlist")返回的是一个List<IPublishedContent>类型的集合,你需要再套一层循环来逐个取出里面的内容,然后获取每个项的具体属性值。这里给你修改后的代码:
@inherits UmbracoViewPage<Lecoati.LeBlender.Extension.Models.LeBlenderModel> @foreach (var item in Model.Items) { // 明确转换为IPublishedContent列表,避免类型模糊 var listitems = item.GetValue<List<Umbraco.Core.Models.IPublishedContent>>("checkpointlist"); // 先判断列表是否为空,防止空引用报错 if (listitems != null && listitems.Any()) { foreach (var checkpoint in listitems) { // 替换成你实际的属性别名,比如后台设置的"checkpointTitle"或者"description" <p>@checkpoint.GetPropertyValue("title")</p> // 如果有其他属性,继续添加即可: // <p>@checkpoint.GetPropertyValue("description")</p> } } else { <p>暂无检查点内容</p> } }
这里有几个关键点要注意:
- 明确类型转换:用
GetValue<List<IPublishedContent>>代替单纯的GetValue,这样编译器能清楚知道我们拿到的是一个内容项列表,后续操作更顺畅 - 空值判断:增加
listitems != null && listitems.Any()的判断,避免当列表为空或者null时出现报错 - 属性别名替换:一定要把代码里的
"title"换成你在Umbraco后台给嵌套内容设置的真实属性别名,比如如果你的检查点有个"描述"字段,别名是checkpointDesc,就改成@checkpoint.GetPropertyValue("checkpointDesc")
要是你不确定嵌套内容有哪些属性,可以在调试的时候临时输出@checkpoint.Properties,或者直接去Umbraco后台查看对应的文档类型配置哦。
内容的提问来源于stack exchange,提问作者sjodough




