You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动