母版實際上是頁面的孩子(其實,這是一個用戶控件)。我們不希望頁面必須知道其子控件的私密細節(這就是爲什麼我們首先將這些方面委託給這些控件),所以正確的方法是處理主控上的點擊事件頁面,並從那裏開槍該頁面處理母版另一個事件:
站長:
public event EventHandler SomethingHappened;
protected void Button_Click(object sender, EventArgs e)
{
OnSomethingHappened(EventArgs.Empty);
}
protected void OnSomethingHappened(EventArgs e)
{
if(this.SomethingHappened != null)
{
this.SomethingHappened(this, e);
}
}
頁:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//allows us to change master pages
if(this.Master is MyMaster)
{
((MyMaster)this.Master).SomethingHappened += new EventHandler(HandleSomethingHappened);
}
}
private void HandleSomethingHappened(object sender, EventArgs e)
{
//deal with it
}
非常好,我用UserControls和Pages做了這個(在它上面回答了SO問題),但對MasterPage不確定。解釋讚賞;我不知道它像一個UserControl一樣被處理。額外的MyMaster支票是一個很好的補充。 – 2009-10-15 01:20:45
@Rex M,非常感謝你挽救了我的時間:) – 2012-04-11 05:48:41