asp.net:将UserControl中的对象事件发送到其Parent

时间:2009-06-24 16:26:31

标签: asp.net event-handling

我有一个用户类,其功能为登录()退出() GetData() 。有一个 UserChanged 事件,当调用其中任何一个函数时它会触发。

我的Default.aspx上有UserControls(它们是动态添加的)。

我有一个名为Login.ascx的UserControl。它提供了使用User类的功能:您可以在此处登录/注销。我有一个**** EventHandler *用于** UserChanged *****(如果我没有,它会因找不到对象而失败)。

我需要提醒其他UserControls有关用户状态的更改。 我不知何故需要将Login.ascx中的UserChanged事件传递给它的Parent,Default.aspx。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

<强> Login.ascx.cs

public delegate void OnUserChangedHandler(object sender);
public OnUserChangedHandler OnUserChanged;

private void RaiseUserChangedEvent() //Call this method when the user changes
{
    //UserChanged Event
    if (OnUserChanged != null)
    {
        OnUserChanged(this);
    }
}

<强> Default.aspx.cs

protected override void OnInit(EventArgs e)
{
    InitializeComponent();
    base.OnInit(e);
}

private void InitializeComponent()
{
    loginControl.OnUserChanged += OnUserChanged;
}

private void OnUserChanged(object sender)
{
    //Code here to do something with other controls on this page
}

答案 1 :(得分:2)

还有另一个选项可以告诉父控件有关某些操作的信息 - RaiseBubbleEvent。

您可以在此处阅读:Using RaiseBubbleEvent to Tell a Parent ASP.NET Control to Rebind

那就是孩子控制调用方法 RaiseBubbleEvent (...) 并且所有它的父级(无论它们在层次结构中有多远)都可以覆盖方法 OnBubbleEvent 来处理此事件。 该方法的返回值表示是否需要将此事件传递给下一个父项。

答案 2 :(得分:0)

首先,控件需要广播UserChanged事件,然后需要连接页面来监听事件。

关于如何实现自定义事件和事件处理程序,有很多很好的资源......

从csharphelp.com试试这个

http://www.csharphelp.com/archives4/archive603.html