Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义模块,可将模块添加到模块中,以在DNN 9.2中创建扩展模块_C#_Dotnetnuke_Expander_Dotnetnuke 9_Dnn Module - Fatal编程技术网

C# 自定义模块,可将模块添加到模块中,以在DNN 9.2中创建扩展模块

C# 自定义模块,可将模块添加到模块中,以在DNN 9.2中创建扩展模块,c#,dotnetnuke,expander,dotnetnuke-9,dnn-module,C#,Dotnetnuke,Expander,Dotnetnuke 9,Dnn Module,​我正在使用DNN9.2,并寻找一种可能性来创建一个自己的模块,该模块的工作方式与我可以添加额外内容的模块类似。 在我的例子中,我想添加其他模块,如果父级展开,这些模块将可见;如果父级折叠,这些模块将隐藏。 我想在我的模块中使用窗格控件来放置其他几个模块。这是一种模仿Evoq的网格模块功能的方法,但由于目前还不存在这样的(扩展)模块,因此还可能折叠和扩展其内容 我已经尝试通过在Page\u Load方法中从DotNetNuke.UI.Skins命名空间添加Pane控件并调用Pane.Proces

​我正在使用DNN9.2,并寻找一种可能性来创建一个自己的模块,该模块的工作方式与我可以添加额外内容的模块类似。 在我的例子中,我想添加其他模块,如果父级展开,这些模块将可见;如果父级折叠,这些模块将隐藏。 我想在我的模块中使用
窗格
控件来放置其他几个模块。这是一种模仿Evoq的网格模块功能的方法,但由于目前还不存在这样的(扩展)模块,因此还可能折叠和扩展其内容

我已经尝试通过在
Page\u Load
方法中从
DotNetNuke.UI.Skins
命名空间添加
Pane
控件并调用
Pane.ProcessPane()
来实现它。正如我在数据库中看到的,通过将模块移动到自定义(扩展器)模块中添加的模块与位于模块中的窗格相关。 实际上,我在加载和呈现页面时遇到了一些问题,因为模块位于自定义模块下,而不是数据库中引用的自定义模块中

以下是我的实际代码:

在*.ascx文件中:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="Prototype.View" %>

<div ID="TestModuleDiv" runat="server"></div>
using System;
using System.Web.UI.HtmlControls;
using DotNetNuke.Entities.Modules;
using DotNetNuke.UI.Skins;

protected void Page_Load(object sender, EventArgs e)
{
    var paneName = "MyTestPane" + ModuleContext.ModuleId;

    var paneControl = new HtmlGenericControl("div");
    paneControl.ID = paneName;

    TestModuleDiv.Controls.Add(paneControl);

    var paneId = paneControl.ClientID.Replace("dnn_", "");

    PortalSettings.ActiveTab.Panes.Add(paneId);

    var pane = new Pane(paneId, paneControl);
    pane.ProcessPane();
}
有人知道我怎样才能达到我想要的行为吗

其目的是创建一个可包含其他几个模块的扩展模块,但我们不确定如何以最佳实践方式构建它

编辑
抱歉,我错过了一个事实,我正在寻找一种具有最小化JS魔力的方法。因此,我认为它必须发生在代码隐藏中。

此外,页面必须记住哪个“expander”模块被折叠,哪个被展开。

您可能想看看这个开源项目:

   https://github.com/redtempo/dnnstuff.aggregator

工作已经完成。

好吧,我们已经找到了一种方法,可以像我们预期的那样工作

将整个模块添加/移动到扩展器模块中,可在开箱即用的情况下自动完成DNN自身的功能。我们没有额外的实施

我们创建了一个自己的
面板
控件,该控件继承自
HtmlContainerControl
,并且具有一些逻辑,可以将父皮肤用作容器,进而使用父模块从中获取活动选项卡(页面)。这一切都将在方法
OnInit
中发生。 同样在
OnInit
方法中,注册
OnInitComplete
方法。在此方法中,我们将所有(先前添加的)模块移动到窗格中。否则,扩展器模块添加的模块将不会放在扩展器内部,而是放在扩展器下方。 之后,我们必须在活动选项卡中注册我们自己的窗格控件,并在窗格上调用finally
ProcessPane

我希望它能帮助所有需要类似东西的人。
很抱歉,我没有发布任何代码,但这是一个针对客户的实现,我不允许提供给第三方。

不确定您的要求是什么,但使用引导折叠如何?好的,哪些问题是开放的,我可以澄清它们。目的是使一个模块可以包含多个其他模块。类似于外壳中的容器,它也可以包含多个模块,但我希望它在一个模块中折叠和扩展。您以前知道要使用的模块吗?不知道,应该可以将每个在DNN中安装的模块添加到我们的自定义模块中。您计划如何添加这些模块?另外,你知道你可以添加的Mudule的最大数量吗?很抱歉我的回复太晚了,但是在深入研究之后,这并不是我们所期望的。它包含几个JS逻辑,我们想要一个完全没有JS的解决方案。但非常感谢您的做法!