我的dnn模块通信有问题。我有一个模块,它实现了监听器和发送器的模块通信接口。在这个模块中,我有一个占位符,我加载一个新的ascx控件。问题是当我想从这个新的动态加载控件进行通信时。在此控件中,我还实现了模块通信接口(侦听器和发送器)。但是当我调用sender方法时,在这个动态加载控件中更新另一个模块(在同一页面上)没有任何反应。但后来我从动态加载的控件容器控件(我有占位符的控件)中调用了“sender”,它可以更新同一页面上的其他模块。它接缝模块通信在动态加载的ascx控件中根本不起作用。 有没有人有任何想法,解决这个问题 / theonealf
答案 0 :(得分:1)
我猜这是一个时间问题。尝试在Init
事件中加载动态控件,看看它是否会捕获正在发送的通信。
答案 1 :(得分:0)
同意@bdukes,我还建议您检查其他内容:
可以进行其他检查,但这取决于您的答案,请尝试上述和@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期间这样做。通过这种方式,您可以确保在通信产生之后发生通信消耗。
祝你好运!