【问题标题】:VB/ASP.NET Fire events across WebPartsVB/ASP.NET 跨 WebPart 触发事件
【发布时间】:2010-10-06 15:46:55
【问题描述】:

首先,我的环境: VB.NET .NET 2.0 AJAX 更新面板也用于 webpart 区域。 我有一个母版页和默认页。 默认页面有 WPM 和两个区域。 每个 webpart 只是一个外壳,一个用户控件用于 A & B

我有两个 webpart,A 和 B。(用户控件)- A 有许多按钮。 B 有一个列表框和 Subs,它填充列表框并刷新也位于(在 Web 部分 B 内)包装列表框的 UpdatePanel。 我想单击 webpart A 中的一个按钮,它会在 webpart B 中触发一个名为“Public Sub FillList()”的子,我似乎无法锻炼如何做到这一点。 我查看了 webpart 连接,我知道我可以传递属性,这很好,但我想调用 subs/fire 事件。

提前致谢!

【问题讨论】:

    标签: asp.net vb.net web-parts


    【解决方案1】:

    这听起来像是“event bubbling”的案例。

    事件冒泡允许某个容器的组成控件使其事件“冒泡”或提升以由父(容器)控件处理。

    Webpart A 中的按钮控件的点击事件中可以包含以下代码:

    RaiseBubbleEvent(Me, args)
    

    其中 args 是派生自 System.EventArgs 的一些自定义类型。然后,这将在父容器(在您的情况下为 UserControl 本身)上引发(或“冒泡”)事件(使用您的自定义参数)。这是在父容器上的以下事件中处理的:

    Protected Overrides Function OnBubbleEvent(ByVal source As Object, ByVal args As System.EventArgs) As Boolean
    

    这可以在您的网页中沿包含层次结构重复(页面是最终容器)。一旦此事件到达作为您的两个用户控件(A 和 B)的父容器的容器,您就可以从父容器的代码中调用 UserControl B 上的公共方法,如果您愿意,可以传入自定义事件参数。

    【讨论】:

      【解决方案2】:

      我知道它有点脏,但我找到了一个可行的解决方案:

      MyControlThatNeedsUpdated grid = (MyControlThatNeedsUpdated)FindControlRecursive(Page, "MyControlThatNeedsUpdated");
      grid.updateList();
      
      
      private Control FindControlRecursive(Control root, string ControlType)
      {
          if (root.GetType().Name == ControlType)
          {
              return root;
          }
      
          foreach (Control c in root.Controls)
          {
              Control t = FindControlRecursive(c, ControlType);
              if (t != null)
              {
                  return t;
              }
          }
      
          return null;
      }
      

      我调用的方法是'updateList()'

      【讨论】:

        猜你喜欢
        • 2010-10-07
        • 2016-05-14
        • 1970-01-01
        • 1970-01-01
        • 2013-06-02
        • 2018-09-15
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        相关资源
        最近更新 更多