0

大家好,我在一个 aspx 页面的 page-init 事件中加载了两个 ascx。控件 1 有一个单选按钮列表,我希望控件 2 上有一个下拉列表来响应它的 selectedIndex 更改。到目前为止,我在 SelectedIndexChange 处理程序上调用 RaiseBubbleEvent 并传递控件引用和 commandArgs。然后在 aspx 中我重写 OnBubbleEvent 并且我能够接收控件引用和 commandArgs。我的问题是如何将这些信息传递给控件 2。页面不知道控件,因为它们是动态加载并添加到 aspx 中的 asp:PlaceHolders 中的。我需要 Control 2 知道选择了哪个单选按钮,以便我可以更改控件 2 上下拉列表的数据源。有没有人有这样的例子?任何指针或提示将不胜感激。

谢谢,~ck 在圣地亚哥

4

3 回答 3

0

我不确定这是一个很好的解决方案,但它应该可以工作。为控件 2 中的事件创建一个处理程序,并通过某种方式访问​​该处理程序的委托。然后只需将控件 1 的事件连接到该访问器返回的处理程序。非常粗略的例子:

在控制 1 中:

public event SelectedIndexChanged;

public void PageLoad()
{
    radioList.SelectedIndexChanged += new EventHandler(RadSelectedIndexChanged);
}

public void RadSelectedIndexChanged(object sender, EventArgs args)
{
    SelectedIndexChanged(sender, args);
}

在 aspx 页面中:

control1.SelectedIndexChanged += control2.GetHandler();

在控制 2 中:

public EventHandler GetHandler()
{
    return new EventHandler(HandleEvent);
}

protected void HandleEvent(object sender, EventArgs args)
{

}
于 2009-08-21T02:09:38.687 回答
0

那么,控件 2 应该只是附加到另一个控件的“SelectedIndexChanged”事件。由于某种原因,这是不可能的吗?

于 2009-08-21T02:10:21.230 回答
0

既然您提到页面不知道这些控件,最好的办法是让 Control1 类公开一个带有 I-want-to-listen-to-your-event setter 方法的接口。

Control2 应在其父级(页面)中搜索实现该接口的其他同级控件,然后调用 setter 传递对其处理程序的引用。

这样,控件可以不加修改地拖放到任何其他页面上。

编辑:

添加了一个示例 Web 应用程序以供下载。源代码已发布到公共领域。

于 2009-08-21T03:24:48.037 回答