C# 访问DotNetNuke中asmx webservice文件中的ModuleID和PortalID
我的DotNetNuke模块中有一个asmx webservice文件。如何访问此asmx文件中的PortalID和ModuleID。当我尝试在代码behinde.ascx.cs文件中运行良好的代码时,它返回portalID=0,ModuleID=1C# 访问DotNetNuke中asmx webservice文件中的ModuleID和PortalID,c#,asp.net,ajax,asmx,dotnetnuke,C#,Asp.net,Ajax,Asmx,Dotnetnuke,我的DotNetNuke模块中有一个asmx webservice文件。如何访问此asmx文件中的PortalID和ModuleID。当我尝试在代码behinde.ascx.cs文件中运行良好的代码时,它返回portalID=0,ModuleID=1 private Components.Setting _ModuleSettings; _ModuleSettings = new Components.Setting(PortalId, ModuleId); 模块设置要求您处于模块的上下文
private Components.Setting _ModuleSettings;
_ModuleSettings = new Components.Setting(PortalId, ModuleId);
模块设置要求您处于模块的上下文中。.asmx服务不会有那种级别的上下文。编辑 下面的内容仍然正确,但是DNN 6.2的发行版包含了专门用于在DNN中构建web服务的服务框架。服务框架是一个比使用基于.asmx的服务更好的解决方案 /EDIT 由于您执行的是web服务调用,而不是DNN模块,因此不会为您提供上下文。但是,您可以自己重新创建它。获取当前门户设置的步骤
var domainName = Globals.GetDomainName(request);
var alias = PortalAliasController.GetPortalAliasInfo(domainName);
return new PortalSettings(-1, alias);
由于您的选项卡不在页面的上下文中,ActiveTab将返回默认值(除非您可以用活动选项卡ID替换-1)
要获取模块上下文,您需要将moduleId和tabId传递给您的服务,然后调用:
var module = new ModuleController().GetModule(moduleId, tabId)
这个答案比选择的答案有用得多。谢谢@goughy000查看DNN服务框架,它是一个比手工推出的基于.asmx的服务更好的解决方案。不幸的是,我们正在开发一个旧的门户网站,客户不会升级:(