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

将2sxc应用注入DNN模板时触发空引用异常,求排查方案

问题

我正尝试按照WolfXMachina的教程将2sxc应用注入DNN模板文件,教程代码如下:

<%@ Import Namespace="DotNetNuke.Entities.Modules" %>
<%@ Import Namespace="ToSic.Sxc.Dnn" %>
<%@ Import Namespace="ToSic.Sxc.Services" %>
 <%
    var moduleController = new ModuleController();
    ModuleInfo footerModule = moduleController.GetModule(39, 394);
    if (footerModule != null) {
  %>
    <%= this.GetScopedService<IRenderService>().Module(39, 394) %>
  <%
    }
  %>

我已确认页面ID,并从2sxc应用列表中获取了应用ID,但运行时出现以下空引用异常:

DotNetNuke.Services.Exceptions.Exceptions - DotNetNuke.Services.Exceptions.PageLoadException: Object reference not set to an instance of an object. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at ToSic.Sxc.Dnn.DnnModuleAndBlockBuilder.GetModuleImplementation(Int32 pageId, Int32 moduleId) in C:\Projects\2sxc\2sxc\Src\Dnn\ToSic.Sxc.Dnn.Core\Dnn\DnnModuleAndBlockBuilder.cs:line 30
   at ToSic.Sxc.Blocks.ModuleAndBlockBuilder.GetBlock(Int32 pageId, Int32 moduleId) in C:\Projects\2sxc\2sxc\Src\Sxc\ToSic.Sxc\Blocks\ModuleAndBlockBuilder.cs:line 25
   at ToSic.Sxc.Blocks.RenderService.Module(Int32 pageId, Int32 moduleId) in C:\Projects\2sxc\2sxc\Src\Sxc\ToSic.Sxc\Blocks\Renderers\RenderService.cs:line 124
   at ToSic.Sxc.Dnn.Services.DnnRenderService.Module(Int32 pageId, Int32 moduleId) in C:\Projects\2sxc\2sxc\Src\Dnn\ToSic.Sxc.Dnn.Core\Dnn\Services\DnnRenderService.cs:line 37

请问我操作中存在哪些错误?或者是否有其他获取应用ID的途径?

解决分析
  • 核心错误:混淆了应用ID和模块ID
    教程代码里的GetModule(模块ID, 页面ID)和RenderService.Module(模块ID, 页面ID),第一个参数是模块ID(即你添加到页面上的2sxc模块的ID),但你误用了从2sxc应用列表拿到的应用ID,导致系统找不到对应模块,触发空引用异常。

  • 正确获取模块ID的方法

    1. 先把目标2sxc应用添加到任意DNN页面,右键模块选择「设置」,在打开的页面URL中找到mid=xxx,xxx就是模块ID;
    2. 登录DNN后台,进入「内容→页面管理」,找到包含该模块的页面,点击「编辑页面内容」,右键模块选择「复制模块ID」(部分DNN版本支持);
    3. 直接查询DNN数据库的Modules表,通过模块标题或关联的DesktopModuleID(2sxc的桌面模块ID)筛选出目标模块的ModuleID字段值。
  • 修正后的代码示例
    假设你的模块ID是123,页面ID是394,代码应修改为:

    <%@ Import Namespace="DotNetNuke.Entities.Modules" %>
    <%@ Import Namespace="ToSic.Sxc.Dnn" %>
    <%@ Import Namespace="ToSic.Sxc.Services" %>
     <%
        var moduleController = new ModuleController();
        ModuleInfo footerModule = moduleController.GetModule(123, 394);
        if (footerModule != null) {
      %>
        <%= this.GetScopedService<IRenderService>().Module(123, 394) %>
      <%
        }
      %>
    
  • 额外注意事项

    • 确保该模块在对应的页面上处于已发布状态,未发布的模块会导致GetModule方法返回null;
    • 若不需要提前校验模块是否存在,可简化代码,但空引用异常说明模块无法被找到,保留判断逻辑能避免页面崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:01:19