我有一个用户类,其功能为登录()和退出()和 GetData() 。有一个 UserChanged 事件,当调用其中任何一个函数时它会触发。
我的Default.aspx上有UserControls(它们是动态添加的)。
我有一个名为Login.ascx的UserControl。它提供了使用User类的功能:您可以在此处登录/注销。我有一个**** EventHandler *用于** UserChanged *****(如果我没有,它会因找不到对象而失败)。
我需要提醒其他UserControls有关用户状态的更改。 我不知何故需要将Login.ascx中的UserChanged事件传递给它的Parent,Default.aspx。
我该怎么做?
答案 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试试这个