提升控制事件由.Net Web应用程序的完全独立部分处理

时间:2011-09-26 18:35:08

标签: .net asp.net events design-patterns

民间,

我觉得有一个经典的设计模式涵盖了这种情况,但我没有参考方便。

我的情况是用户点击按钮而网页的另一部分响应。不寻常(或至少不方便)的是,网页的按钮和响应部分处于非常不同的控制层次结构中,无论是在与共同祖先的距离方面还是在应用关注方面。它们都是一系列(单独的)黑匣子的内部部分。

我无法想出一个优雅的方式来触发另一个。我不想将一系列事件提升到控件层次结构的顶部,然后调用一系列嵌套方法来实现所需的效果。 (“效果”!=视觉效果;我无法用jQuery解决这个问题)我希望事件和响应者保持对彼此的无知:我不会通过让后者知道并直接订阅关注来违反关注点的分离前者产生的事件。我已经考虑了其他一些不优雅的解决方案,但我不会因为将它们列出来而烦恼你。

基本上我想我需要一种方法来为任何东西都能订阅任何东西的事件实现发布者 - 订阅者模型。

我正在使用.Net 4.0。这样做的任何好框架?有任何简单的方法来实现它吗?

非常感谢,

Ann L.

3 个答案:

答案 0 :(得分:1)

听起来你需要一个EventAggregator。您应该在Composite Application Library中找到实现。

EventAggregator允许您注册通知并从应用程序的完全独立部分引发通知。

答案 1 :(得分:1)

对于服务器端事件,您可以使用:
Reactive Extensions(Rx)......
http://msdn.microsoft.com/en-us/data/gg577609

对于客户端活动,您可以使用:
Backbone JS
http://documentcloud.github.com/backbone/
淘汰赛JS
http://knockoutjs.com/

你提到你不能使用jQuery我可以问为什么?

答案 2 :(得分:0)

我不确定我是否理解正确,但听起来你想要为同一个事件处理程序分配多个按钮,你可以这样做:

<asp:Button ID="Button1" runat="server" Text="Button 1" OnClick="Button_Click" ... />
<asp:Button ID="Button2" runat="server" Text="Button 2" OnClick="Button_Click" ... />

在代码隐藏中:

protected void Button_Click(object sender, EventArgs e)
{
    if (sender.Equals(Button1))
    {
        //Button1 logic
    }
    else if (sender.Equals(Button2))
    {
        //Button2 logic
    }
}

修改

根据您的评论,听起来您可能需要一个事件处理程序。如果是这样,尝试这样的事情:

public event EventHandler ButtonClick;

protected void Button_Click(object sender, EventArgs e)
{
    if (this.ButtonClick != null)
        this.ButtonClick(sender, e);
}