Dotnetnuke模块通信问题

时间:2011-08-22 20:05:47

标签: module dotnetnuke

我的dnn模块通信有问题。我有一个模块,它实现了监听器和发送器的模块通信接口。在这个模块中,我有一个占位符,我加载一个新的ascx控件。问题是当我想从这个新的动态加载控件进行通信时。在此控件中,我还实现了模块通信接口(侦听器和发送器)。但是当我调用sender方法时,在这个动态加载控件中更新另一个模块(在同一页面上)没有任何反应。但后来我从动态加载的控件容器控件(我有占位符的控件)中调用了“sender”,它可以更新同一页面上的其他模块。它接缝模块通信在动态加载的ascx控件中根本不起作用。 有没有人有任何想法,解决这个问题 / theonealf

3 个答案:

答案 0 :(得分:1)

我猜这是一个时间问题。尝试在Init事件中加载动态控件,看看它是否会捕获正在发送的通信。

答案 1 :(得分:0)

同意@bdukes,我还建议您检查其他内容:

  1. 检查是否有任何异常,但没有任何反应
  2. 您的控件是否继承自PortalModuleBase?如果要使用moduleId,UserInfo,PortalId或任何其他dnn特定对象,则需要这样做。
  3. 可以进行其他检查,但这取决于您的答案,请尝试上述和@bdukes建议。

答案 2 :(得分:0)

老实说,我在通讯界面上取得的成功有限。如果你能够满足你的需求,那就太棒了。如果您发现需要另一种解决方案,这就是我所做的:

如果我正确理解了这个问题,你就会关注一个特定的用例,在这个用例中,一个模块在加载页面时需要与另一个模块进行通信。如果是这样,您很可能有一个需要通信的模块,以及一个或多个需要接收该通信的模块。

我已将Context.Items与ASP.NET生命周期结合使用来解决此问题。 Items集合只是一个可以塞进或拉出任何东西的包。需要通信的模块可以在Page_Load

期间将内容放入该项目包中
var item = "My Thing";
Context.Items.Add("MyThingKey", item);

需要消耗该东西的模块可以在PreRender期间从该包中取出东西。

var item = Context.Items["MyThingKey"].ToString();

关键是在PreRender期间这样做。通过这种方式,您可以确保在通信产生之后发生通信消耗。

祝你好运!