You need to enable JavaScript to run this app. 如何使用C#为2sxc的Hero横幅模块创建面包屑导航并获取当前页面父级名称
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#为2sxc的Hero横幅模块创建面包屑导航并获取当前页面父级名称

实现方案

用Dnn原生Tab控制器获取父页面名称

你现在的代码只拿到了父页面的ID,没根据ID拉取父页面的元数据,直接用Dnn自带的TabController就能解决,把原来的逻辑替换成下面的写法:

@using DotNetNuke.Entities.Tabs;

@if (Dnn.Tab.ParentId != -1)
{
    var parentTab = TabController.Instance.GetTab(Dnn.Tab.ParentId, Dnn.Portal.PortalId);
    <nav class="uppercase text-sm font-semibold tracking-wider">
        <span class="text-honeydew visited:text-honeydew">@parentTab.TabName</span>
        <span>/</span>
    </nav>
}

几个要注意的点:

  • 查询的时候必须带上当前站点的PortalId,不然多站点运行的环境下很容易拿错其他站点的同ID页面名称
  • 取TabName属性就行,这个值就是你在Dnn后台给页面填的导航名称,刚好匹配你要的Scholarships页对应父页Teachers、Volunteer页对应父页Get Involved的效果
  • 你原来判断根页面不显示面包屑的逻辑完全没问题,ParentId == -1就是Dnn里顶层根页面的固定判定值,不用改

更适配2sxc环境的轻量化写法

既然你是在2sxc里做全站公用的Hero模块,更推荐用2sxc自带的Page服务,不用手动引Dnn核心的命名空间,后续升级2sxc版本也不容易出兼容问题:

@if (Dnn.Tab.ParentId != -1)
{
    var parentTabName = Kit.Page.Parent?.Title;
    <nav class="uppercase text-sm font-semibold tracking-wider">
        <span class="text-honeydew visited:text-honeydew">@parentTabName</span>
        <span>/</span>
    </nav>
}

几个常见的坑提前提醒:

  • 别直接用Dnn.Tab.ParentTab这个原生属性,大部分Dnn版本下这个属性默认不会自动填充,直接调用百分百触发空引用报错
  • 2sxc的Kit.Page.Parent已经内置了权限校验、多站点隔离的逻辑,这种全站复用的通用模块用它最省心,以后要做二级、三级的多级面包屑,顺着Kit.Page.Parent.Parent往上遍历就行,不用自己额外写查询逻辑

内容的提问来源于stack exchange,提问作者Aaron - Wolf X Machina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 04:06:04