如何使一个Web用户控件子控件事件导致一个Catchall事件触发一次每次回发父

时间:2009-04-29 20:00:05

标签: c# asp.net visual-studio-2008 events

假设我有一个Web用户控件,其中包含多个下拉列表。它们都被设置为AutoPostBack = true,但是我的控件中的每个SelectedIndexChanged事件处理程序将触发/链接我为其他DDL定义的其他SelectedIndexChanged处理程序。这意味着当用户更改单个DDL时,事件处理程序将链接/触发其他几个DDL。事件被链接的逻辑非常复杂,数据驱动,并且可以根据用户实际更改的列表而改变。因此,很难确定哪个事件处理程序最后会触发。

从页面的角度来看,我想在用户控件上订阅一个SelectionChanged事件,每个回发只触发一次,直到所有事件处理程序都被触发。我不关心哪个事件处理程序已经触发,只是整个控件的状态发生了变化。

我正在使用C#3.5 / ASP.NET 2.0 / VisualStudio 2008

我该怎么做呢?

编辑:将澄清移至原始描述中。我认为我指定AutoPostBack = true而没有指定链接发生的事实是误导。我为这种困惑道歉。

2 个答案:

答案 0 :(得分:2)

这取决于您何时需要在页面生命周期中触发事件处理程序。

这是一个策略:

1)在您的用户控件中,跟踪下拉列表的选择更改。如果执行了事件处理程序,请更新本地跟踪变量。

2)在你的usercontrol的PreRender处理程序中,检查跟踪变量,如果需要,则激活用户控件的SelectionChangedEvent。

此策略将保证页面生命周期的事件处理阶段已完成,但缺点是您的主页在PreRender阶段之前不会在您的用户控件上收到“SelectionChanged”。这可能适用于您的情况,也可能不适用。

如果您之前需要为您的usercontrol处理SelectionChanged事件,那么您可能需要在下拉列表处理程序中添加更复杂的跟踪逻辑,并添加跟踪变量以确保只有用户控件的“SelectionChanged”事件才能获得解雇了一次。

答案 1 :(得分:1)

我认为你需要在子控件中创建一个委托,然后将该委托引用到父控件中。