我正在使用DNN 9.2并寻找创建自己的模块的可能性,该模块将像Atlassian Confluence 的 Expander Macro一样工作,我可以在其中添加其他内容。在我的情况下,我想添加其他模块,如果父级展开则可见,如果父级折叠则隐藏。我想Pane
在我的模块中使用一个控件来将其他几个模块放入其中。这是一种模仿Evoq 的 Grid模块功能的方法,但由于尚不存在此类(扩展器)模块,因此还可以折叠和扩展其内容。
我已经尝试通过在方法中添加命名空间中的Pane
控件并调用. 正如我在数据库中看到的,通过将其移动到我们的自定义(扩展器)模块中添加的模块与位于我们模块中的窗格相关。实际上我在加载和渲染页面时遇到了一些问题,因为该模块位于我们的自定义模块下而不是在我们的自定义模块中,就像它在数据库中引用的那样。DotNetNuke.UI.Skins
Page_Load
pane.ProcessPane()
以下是我的实际代码:
在 *.ascx 文件中:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="View.ascx.cs" Inherits="Prototype.View" %>
<div ID="TestModuleDiv" runat="server"></div>
在 *.ascx.cs(文件后面的代码)中:
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 魔法的方法。因此我认为它必须发生在代码后面。
此外,页面必须记住哪个“扩展器”模块被折叠以及哪个扩展。