问候所有人,我在一个aspx页面的page-init事件中加载了两个ascx。控件1有一个单选按钮列表,我希望控件2上有一个下拉列表来响应它的selectedIndex更改。到目前为止,我在SelectedIndexChange处理程序上调用了RaiseBubbleEvent,并传递了一个控件引用和commandArgs。然后,在aspx中,我覆盖了OnBubbleEvent,并且我能够接收到控件引用和commandArgs。我的问题是如何将此信息传递给控件2。页面不知道这些控件,因为它们是动态加载并添加到aspx中的asp:占位符的。我需要控件2来知道选择了哪个单选按钮,这样我就可以更改控件2上的下拉列表的数据源。如有任何建议或建议,我们将不胜感激。
谢谢,圣地亚哥的ck
发布于 2009-08-21 02:09:39
我不确定这是一个非常好的解决方案,但它应该可以工作。为控件2中的事件创建一个处理程序,并以某种方式访问该处理程序的委托。然后只需将控件1的事件连接到该访问器返回的处理程序即可。非常粗糙的例子:
在control1中:
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();在control2中:
public EventHandler GetHandler()
{
return new EventHandler(HandleEvent);
}
protected void HandleEvent(object sender, EventArgs args)
{
}发布于 2009-08-21 02:10:21
那么,控件2实际上应该只是附加到另一个控件的'SelectedIndexChanged‘事件。出于某种原因,这是不可能的吗?
发布于 2009-08-21 03:24:48
既然您提到页面不知道这些控件,那么最好让Control1类使用I-want- to -listen- to -your-event设置器方法公开一个接口。
Control2应该在其父控件(页面)中搜索实现该接口的其他同级控件,然后调用设置器,并将引用传递给它们的处理程序。
这样,控件无需修改即可拖放到任何其他页面上。
编辑:
添加了下载的sample web application。源代码被发布到公共领域。
https://stackoverflow.com/questions/1309709
复制相似问题