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

2sxc 13.12.0嵌套App调用Render.All触发空引用异常求助

问题:2sxc 13.12.0 嵌套Content Block调用Render.All抛出空引用异常

本人长期在DNN(Dot Net Nuke)环境下使用2sxc,旧版本中可通过代码将「Content Block」项嵌套到其他应用的文本编辑器字段内,实现应用间嵌套效果。
旧版本正常运行的代码:

@ToSic.Sxc.Blocks.Render.All(modal, field: "Apps", merge: modal.Body)

配套配置规则:在2sxc应用中承载嵌套应用的字段下方,单独创建名为Apps的字段即可正常生效。

升级到2sxc 13.12.0正式推荐版本后,上述写法直接抛出如下空引用错误:

System.NullReferenceException: Object reference not set to an instance of an object.
at ToSic.Sxc.Edit.EditService.EditService.ConnectToRoot(IDynamicCodeRoot codeRoot)
at ToSic.Sxc.Blocks.RenderService.GetEdit(DynamicEntity parent)
at ToSic.Sxc.Blocks.RenderService.All(DynamicEntity parent, String noParamOrder, String field, String apps, Int32 max, String merge)
at ToSic.Sxc.Blocks.Render.All(DynamicEntity parent, String noParamOrder, String field, String apps, Int32 max, String merge)
at ASP._Page_Portals_0_2sxc_LayoutApp__LayoutApp_cshtml.Execute() in c:\inetpub\wwwroot\little-seed-dnn\Portals\0\2sxc\LayoutApp_LayoutApp.cshtml:line 44

初步怀疑是缺少对应using语句,求可行的解决思路。

解决方案

这个报错和缺少using语句没有关系,核心原因是2sxc 13.x版本调整了Render服务的上下文校验逻辑,旧版本直接调用静态类ToSic.Sxc.Blocks.Render的方式,无法自动关联当前Razor页面的代码根上下文,编辑服务初始化拿不到必要参数才抛出空引用。
按以下方式调整即可修复:

  • 弃用旧的静态类调用写法,改用当前Razor模板内置的Render实例(或者Kit.Render)调用All方法,该实例默认绑定当前页面的执行上下文,不会出现上下文丢失问题,修改后代码如下:
@* 替换原有静态调用代码 *@
@Render.All(modal, field: "Apps", merge: modal.Body)
  • 检查模板基类配置:2sxc 13+版本的Razor模板需要将基类设置为ToSic.Sxc.Dnn.RazorComponent,旧版兼容基类不会自动注入Render等内置服务实例,会导致调用失败。
  • 字段配置校验:确认存储嵌套内容块的Apps字段类型为Content-Block(内容块),不要使用普通文本、实体等其他类型,新版本对嵌套块字段的类型校验比旧版严格,类型不匹配也会导致服务初始化异常。
  • 若该模板用于AJAX动态加载的局部场景,需要在模板开头加上@RequiresContextForEditing(),手动声明需要加载编辑上下文,避免编辑服务初始化缺参。
  • 调整后仍报错的话,可以临时移除merge: modal.Body参数,单独输出@Render.All(modal, field: "Apps")的结果,排查是否是正文内容的标签嵌套问题导致上下文断裂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:27:47