【问题标题】:Dotnetnuke module communication problemDotnetnuke 模块通信问题
【发布时间】:2011-08-22 20:05:46
【问题描述】:

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

【问题讨论】:

    标签: module dotnetnuke


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      同意@bdukes,还有我建议检查的其他事项:

      1. 在没有任何反应的情况下检查是否有异常
      2. 您的控件是否继承自 PortalModuleBase?如果您想使用 moduleId、UserInfo、PortalId 或任何其他 dnn 特定对象,这将是必需的。

      可能还有其他检查,但这取决于您通过尝试上述方法和@bdukes 建议的答案。

      【讨论】:

        【解决方案3】:

        老实说,我在通信界面方面的成功有限。如果您可以根据自己的需要工作,那就太好了。如果你发现你需要其他解决方案,我已经这样做了:

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

        我已将Context.Items 与 ASP.NET 生命周期结合使用来解决此问题。 Items 系列只是一个可以塞入或取出任何东西的袋子。需要通信的模块可以在Page_Load期间把东西放进那个物品包里:

        var item = "My Thing";
        Context.Items.Add("MyThingKey", item);
        

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

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

        关键是在 PreRender 期间执行此操作。这样,您就可以确保通信的消费发生在通信生成之后

        祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-01-09
          • 2011-02-17
          • 1970-01-01
          • 2023-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多