我正在开发一个DotNetNuke模块,它由几个不同的屏幕组成,每个屏幕都有自己的一组用户界面交互。我决定通过将每个屏幕放在不同的模块控件中来处理这个问题。我可以找到加载该控件的唯一方法是通过以下方式为链接提供URL:
Globals.NavigateURL(Constants.LicenseDetailControl, "clientId=" + _clientId, "licenseId=" + data.Id, "mid=" + this.ModuleId);
不幸的是,由于mid=xxx
查询参数,这限制了页面仅呈现此特定模块。但是,如果我不提供模块ID参数,那么我的控件根本不会渲染,页面为空白。
有没有办法渲染特定的控件而不强制页面只显示一个模块?
答案 0 :(得分:3)
有没有办法渲染特定的控件而不强制页面只显示一个模块?
答案不是。
通过指定ctl类型来重新发送特定控件,模块ID通常用于编辑和管理模块,它们专门从页面中排除其他模块。
正如Mitchel回答的那样,你必须自己动态加载。还有其他模块可以执行此操作,您可以复制模式。许多Ventrian模块使用自己的Url规范来加载不同的控件(这意味着不使用Url中的/ ctl / xx和/ mid / yy,而是将其替换为您自己的定义,如'view = x')
但是,您还可以查看在不同页面上传播模块,以便一个DNN页面具有“列表”而另一个具有“视图”。这提供了一组更合理的Url(想象一下名为/ licenses的许可证列表页面,然后是名为/ license / licenceId / xx的许可证详细信息页面)。它还允许在整个站点中使用模块的更大灵活性。但它确实使安装不那么直观,因为它只是将所有模块转储到一页上。
我不久前写了一篇关于这个主题的博客文章 - 试图解释它们是如何组合在一起的。它虽旧,但仍然相关,可能会提供更多信息。 Designing, Structuring and Architecting DotNetNuke Modules
或者,正如另一位评论者已发布的那样,只需对内容进行完整的AJAX显示。
答案 1 :(得分:2)
嗯,答案并不像你希望的那么容易。您正在考虑的情况是所谓的“模块隔离”,从框架的角度来看,没有真正的解决方法。
但是,您可以在模块中使用一些选项来获得所需的效果。
我个人使用1或3.一个效果很好并且最干净,但我发现一些控件存在动态注入问题。我更喜欢选项3,因为我可以在所有未被渲染的控件上禁用viewstate,以减少原本会被2膨胀的页面大小。