2

首先,我的环境: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 事件。

提前致谢!

4

2 回答 2

1

这听起来像是“事件冒泡”的案例。

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

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 上的公共方法,如果您愿意,可以传入自定义事件参数。

于 2009-02-10T14:49:21.917 回答
1

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

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()'

于 2009-02-12T13:47:57.477 回答