2009-06-24 69 views
1

我有一个用户类功能登录()退出()的GetData()。有一个UserChanged事件,当这些函数被调用时它会触发。asp.net:从用户控件发送对象的事件到其父

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

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

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

我怎样才能做到这一点?

回答

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 
} 
0

首先,控件需要广播UserChanged事件,然后页面需要连线以侦听事件。

有很多良好的资源,在那里就如何实现自定义事件和事件处理程序...

试试这个从csharphelp.com

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

+0

所以我需要创建为UserChange事件的委托? – balint 2009-06-24 16:39:40

+0

看看Jon的帖子,他有一些很棒的代码片段......我想他正在展示我的建议。 GL – BigBlondeViking 2009-06-24 17:26:47

2

还有另一种选择告诉家长控制一些操作 - RaiseBubbleEvent。

你可以阅读一下:Using RaiseBubbleEvent to Tell a Parent ASP.NET Control to Rebind

的事情是,子控件调用方法RaiseBubbleEvent(...) 而所有它的父母(无论多远都是他们的层次结构)可以覆写方法OnBubbleEvent来处理此事件。 该方法的返回值指示是否需要将此事件传递给下一个父节点。

相关问题