Masterpage на самом деле ребенок страницы (на самом деле, это UserControl). Мы не хотим, чтобы страница была осведомлена о интимных деталях своих дочерних элементов управления (поэтому мы делегируем эти аспекты этим элементам управления в первую очередь), поэтому правильный подход заключался бы в обработке события click на главном страницы, а оттуда огонь еще одно событие на MasterPage, который страница обрабатывает:
Master:
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 (ответил на него с вопросами), но не был уверен в MasterPage. Объяснение приветствуется; Я не знал, что это рассматривалось как UserControl. Дополнительная проверка MyMaster - отличное дополнение. –
@Rex M, большое спасибо, что вы сохранили мои лоты время :) –