如何在继承Custom.Hybrid.Razor14的2sxc v16.5.0 cshtml中获取Portal名称
解决方案:在2sxc Hybrid Razor中获取Dnn Portal名称
核心思路
你的视图继承Custom.Hybrid.Razor14(属于2sxc Hybrid模式),无需额外创建辅助类,直接通过2sxc内置API即可获取Dnn Portal信息,完全不用依赖传统Dnn Razor基类的PortalSettings,同时保留Kit属性的使用权限。
具体实现方式
方式1:直接通过Kit.Dnn获取Portal名称
在你的CSHTML文件中直接调用:
@{ var portalName = Kit.Dnn.Portal.Name; }
Kit.Dnn是2sxc Hybrid模式内置的Dnn上下文对象,包含当前Portal的所有核心信息,无需额外继承Dnn特定基类。
方式2:获取底层PortalSettings实例
如果需要操作PortalSettings的其他属性,可通过2sxc服务定位器获取:
@{ using DotNetNuke.Entities.Portals; var portalSettings = GetService<PortalSettings>(); var portalName = portalSettings.PortalName; }
注意需要引入DotNetNuke.Entities.Portals命名空间。
修复你尝试的辅助类写法
你之前的DnnHelper报错是因为CodeTyped基类不会自动注入Dnn上下文,正确写法应为:
using System; using ToSic.Sxc.Data; using DotNetNuke.Entities.Portals; public class DnnHelper : Custom.Hybrid.CodeTyped { public string GetPortalName() { var portalSettings = GetService<PortalSettings>(); return portalSettings.PortalName; } }
在CSHTML中调用:
@{ var helper = CreateInstance<DnnHelper>(); var portalName = helper.GetPortalName(); }
关键说明
Custom.Hybrid.Razor14已集成2sxc核心服务,无需切换到Dnn基类即可访问Dnn上下文Kit属性作为Hybrid模式核心入口,同时支持元标签修改与Dnn信息获取,完全满足你的需求
内容的提问来源于stack exchange,提问作者Constantine Ketskalo
相关产品推荐
相关产品推荐

