【发布时间】:2018-07-18 18:25:59
【问题描述】:
我正在使用 DNN 9.2 并寻找创建自己的模块的可能性,该模块将像 Atlassian Confluence's Expander Macro 一样工作,我可以在其中添加其他内容。
在我的情况下,我想添加其他模块,如果父级展开则可见,如果父级折叠则隐藏。
我想在我的模块中使用Pane 控件来将其他几个模块放入其中。这是一种模仿 Evoq 的 Grid 模块功能的方法,但由于尚不存在此类(扩展器)模块,因此还可以折叠和扩展其内容。
我已经尝试通过在Page_Load 方法中从DotNetNuke.UI.Skins 命名空间添加Pane 控件并调用pane.ProcessPane() 来实现它。正如我在数据库中看到的,通过将其移动到我们的自定义 (expander) 模块中添加的模块与位于我们模块中的窗格相关。
实际上我在加载和渲染页面时遇到了一些问题,因为该模块位于我们的自定义模块下而不是在我们的自定义模块中,就像它在数据库中引用的那样。
以下是我的实际代码:
在 *.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 魔法的方法。因此,我认为它必须发生在代码后面。
此外,页面必须记住哪个“扩展器”模块被折叠,哪个模块被展开。
【问题讨论】:
-
不确定您要什么,但是使用 Bootstrap 折叠呢?
-
好的,我可以澄清哪些问题是开放的。目的是让一个模块可以包含多个其他模块。类似于皮肤中的容器,它也可以包含多个模块,但我希望它在一个模块中折叠和展开。
-
你以前知道你会使用哪些模块吗?
-
不,应该可以将每个 DNN 中安装的模块添加到我们的自定义模块中。
-
您打算如何添加这些模块?你也知道你可以添加的最大数量吗?
标签: c# expander dotnetnuke-9 dotnetnuke