n8w*_*wrl 5 asp.net user-controls asp.net-4.0
我对我页面上的事件管道问题感到困惑.我有一个ASP.NET UserControl,它监视一些浏览器端事件,并将它们作为UpdatePanel async-post-backs引发到服务器.我们称之为EventPump.它包括一些用于管理事件的JavaScript和服务器端控件.它很棒.
我在同一页面上有几个其他控件,彼此不了解但想订阅EventPump引发的一些事件.通常,一个控件将通过在其标记中包含该控件并对事件进行布线来订阅另一个事件.但在这种情况下会给我多个EventPump实例,这是我不想要的.
如何让多个UserControl订阅公共EventPump控件的事件?
小智 1
我能想到的一些附加选项:
代码到接口,因此EventPump控件实现了IEventPump,它具有各种公共事件。包含页面实现了 IEventPumpContainer,它具有一个名为 EventPump 的属性,该属性允许所有其他用户控件进行注册,如下所示:
((IEventPumpContainer)Page).EventPump.MyEvent += MyEventHandler;
Run Code Online (Sandbox Code Playgroud)如果页面知道需要订阅的控件,您可以让它在事件触发时调用控件上的适当方法。例如:
EventPump.MyEvent += (s, e) => SomeControl.SomeMethod();
Run Code Online (Sandbox Code Playgroud)另一种可以说更好的方法是使事件成为一等公民,并拥有一个可用于订阅和引发事件的事件调度程序。例如:
Events.Register<MyEvent>(e => TextBox.Text = "MyEvent Happened");
...
Events.Raise(new MyEvent());
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |