You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sitecore Multilist with Search字段级回退功能失效问题

问题分析与解决方案

核心问题原因

Sitecore的字段回退逻辑存在层级依赖:Multilist字段的字段级回退生效,不仅需要自身开启回退,还要求关联的目标Item允许项级回退。你的场景中,关联的视频Item仅存在英文版本,且标记为「不允许回退」,导致切换到日语时,Sitecore无法回退到该Item的英文版本,最终Glass Mapper无法解析到有效数据,返回null。


分步解决方案

1. 修改关联Item的项级回退设置

找到仅存在英文版本的视频Item:

  • 进入Item的「版本」选项卡,点击「回退」按钮
  • 取消勾选「不允许该项回退到其他语言版本」,保存设置
  • 注:此操作仅允许该Item跨语言回退,不会影响其他业务逻辑,是字段回退生效的前提

2. 验证Multilist字段的回退配置

确认video字段的模板配置:

  • 打开字段定义或标准值,确保「允许回退」已勾选
  • 检查日语版本的页面Item,该字段未被手动赋值(字段为空时才会触发回退逻辑)

3. 调整Glass Mapper代码配置(可选)

默认情况下Glass Mapper会遵循Sitecore的回退规则,若需显式强化回退支持,可修改字段属性:

[SitecoreField("Video", Setting = SitecoreFieldSettings.AllowFallthrough)]
public virtual IEnumerable<VideoItem> Video { get; set; }

4. 缓存清理与测试

  • 清理Sitecore数据缓存、项目缓存
  • 切换到日语版本,重新加载页面,验证video字段是否能正常获取到英文版本的关联Item

替代方案(无需修改Item回退设置)

若无法调整关联Item的项级回退权限,可在代码层面手动处理回退逻辑:

var currentItem = Sitecore.Context.Item;
// 获取当前Item的英文版本
var englishItem = currentItem.Database.GetItem(currentItem.ID, LanguageManager.GetLanguage("en"));
if (englishItem == null) return;

// 读取英文版本的Multilist字段值并解析
var videoField = englishItem.Fields["Video"];
if (!string.IsNullOrEmpty(videoField?.Value))
{
    var videoItemIds = Sitecore.Data.ID.ParseArray(videoField.Value);
    Video = videoItemIds
        .Select(id => Sitecore.Context.Database.GetItem(id))
        .Where(item => item != null)
        .Select(item => item.GlassCast<VideoItem>());
}

内容的提问来源于stack exchange,提问作者Hasanshali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:53:15