Sitecore:使用Glass渲染图片仅Web数据库失效问题求助
排查Glass RenderImage在Sitecore Web数据库不生成HTML的问题
咱先从最常见的原因开始排查,毕竟Master库正常、Web库出问题,十有八九和发布环节脱不了干系:
先确认数据是否同步到Web库
- 直接登录Sitecore后台切换到Web数据库,找到你的组件项,点开图片字段看看有没有值。如果是空的,那Glass肯定不会生成任何HTML。这时候要查这几点:
- 组件本身有没有发布?别漏发了单个组件或者整个页面;
- 图片关联的媒体项有没有发布?媒体项必须单独发布到Web库,不然Web里找不到对应的资源;
- 检查模板的图片字段配置:确保字段的「可发布」选项是勾选的,要是没勾,发布的时候这个字段根本不会同步到Web库。
- 直接登录Sitecore后台切换到Web数据库,找到你的组件项,点开图片字段看看有没有值。如果是空的,那Glass肯定不会生成任何HTML。这时候要查这几点:
检查RenderImage的调用参数
- 看看你写的
@Html.Glass().RenderImage有没有加什么编辑模式专属的判断?比如如果代码里写了if (Sitecore.Context.PageMode.IsEditing) { ... },那发布到Web库(非编辑模式)自然不会输出内容; - 先简化调用试试,比如只传最基础的参数:
@Html.Glass().RenderImage(Model, x => x.MyImageField),去掉那些自定义的尺寸、CSS类参数,看看能不能生成HTML。如果简化后可以,再逐个加参数排查哪个出了问题。
- 看看你写的
验证Glass的字段映射是否正常
- 在视图里直接输出
@Model.MyImageField?.MediaId,看看Web环境下有没有值。如果输出为空,说明Glass没正确映射到Web库的字段数据:- 检查模型类的图片属性名和模板字段名是否完全匹配(注意大小写,有些配置下是敏感的);
- 确认模型继承了正确的Glass基类,比如
Glass.Mapper.Sc.GlassBase,没有在Web环境下的映射配置遗漏。
- 在视图里直接输出
排查Sitecore Web库的媒体配置
- 确保Web数据库里的媒体项有已发布的版本,并且是当前生效的版本;
- 去Sitecore的发布日志里看看,有没有和图片字段、媒体项相关的发布错误,比如权限不足导致发布失败。
用原生API交叉验证
- 可以试试用Sitecore原生API获取字段值,比如
@Sitecore.Context.Item.Fields["MyImageField"],看看Web库中是否有值。如果原生API也拿不到,那就是Sitecore数据的问题;如果原生能拿到但Glass拿不到,那就是Glass映射的问题,得去检查Glass的配置或者模型。
- 可以试试用Sitecore原生API获取字段值,比如
总的来说,最可能的原因就是发布环节的遗漏——要么组件/媒体项没发布,要么字段没开可发布权限。先从这个方向查,大概率能解决问题。
内容的提问来源于stack exchange,提问作者JKO
相关产品推荐
相关产品推荐

