我可以在不将页面限制为特定模块的情况下呈现 DotNetNuke 模块的控件吗?
本文关键字:模块 情况下 DotNetNuke 控件 我可以 | 更新日期: 2023-09-27 18:31:05
我正在开发一个DotNetNuke模块,该模块由几个不同的屏幕组成,每个屏幕都有自己的一组用户界面交互。 我决定通过将每个屏幕放在不同的模块控件中来处理这个问题。 我能找到加载该控件的唯一方法是通过以下方式为链接提供 URL:
Globals.NavigateURL(Constants.LicenseDetailControl, "clientId=" + _clientId, "licenseId=" + data.Id, "mid=" + this.ModuleId);
不幸的是,由于mid=xxx
查询参数,这将页面限制为仅呈现此特定模块。 但是,如果我不提供模块 ID 参数,则我的控件根本不呈现,并且页面为空白。
有没有办法在不强制页面仅显示一个模块的情况下呈现特定控件?
有没有办法在不强制页面仅显示一个模块的情况下呈现特定控件?
答案是否定的。
通过指定 ctl 类型和模块 ID 来翻转特定控件 Id 通常用于编辑和管理模块,并且它们专门从页面中排除其他模块。
正如米切尔所回答的那样,您必须自己进行动态加载。 还有其他模块可以执行此操作,您可以复制模式。 许多 Ventrian 模块使用自己的 Url 规范来加载不同的控件(这意味着不要在 URL 中使用/ctl/xx 和/mid/yy,而是用您自己的定义替换它,例如"view=x")
但是,您也可以考虑将模块分布在不同的页面上,以便一个 DNN 页面具有"列表",另一个具有"视图"。 这提供了一组更合乎逻辑的 URL(想象一下一个名为/licences 的许可证列表页面,然后是一个名为/licence/licenceId/xx 的许可证详细信息页面)。 它还允许在整个站点中更灵活地使用该模块。 但它确实使安装不那么直观,因为它只是将所有模块转储在一个页面上。
不久前,我写了一篇关于这个主题的博客文章 - 试图解释它们是如何组合在一起的。 它较旧,但仍然相关,可能会为您提供更多信息。设计、构建和架构 DotNetNuke 模块
或者,正如另一位评论者已经发布的那样,只需对内容进行完整的 AJAX 显示即可。
好吧,这个问题的答案并不像你希望的那么容易。 您正在查看的情况是所谓的"模块隔离",从框架的角度来看,没有真正的方法可以绕过它。
但是,对于如何在模块中执行此操作以获得所需的效果,您有一些选择。
- 在主视图控件中,根据传递和处理的查询字符串值,将实际视图动态加载到 PlaceHolder 中。
- 在您的主视图控件中,每个视图都有面板,并根据需要通过参数显示/隐藏它们 在主视图控件中,为每个
- 视图添加子控件。 在这里,您可以根据需要启用/禁用项目和视图状态以处理视图,再次通过处理参数。
就个人而言,我选择1或3。 一个效果很好,而且是最干净的,但我发现有些控件存在动态注入问题。 否则,我更喜欢选项 3,因为我可以在所有未呈现的控件上禁用视图状态,以减少页面大小,否则页面大小会膨胀 2。