2009-10-14 5 views
4

У меня есть ImageButton в MasterPage. Я хочу, чтобы событие OnClick запускалось и было захвачено страницей .ASPX, размещенной внутри MasterPage?Событие Pass MasterPage ImageButton для контента Страница

MasterPage:

<asp:ImageButton ID="btnClear" OnClick="Clear_Click" 
ImageUrl="images/Back_Icon_06.png" runat="server" AlternateText="Clear" 
width="38" height="39"/> 

ответ

8

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

Очень хорошо, я делаю это с помощью UserControls и Pages (ответил на него с вопросами), но не был уверен в MasterPage. Объяснение приветствуется; Я не знал, что это рассматривалось как UserControl. Дополнительная проверка MyMaster - отличное дополнение. –

+0

@Rex M, большое спасибо, что вы сохранили мои лоты время :) –

1

Я бы рекомендовал указания строго типизированных главную страницу я п вашей страница содержания и обнажая событие на стороне мастера-странице

Вот хороший MSDN reference

Это похоже на what Rex M specified но только упрощает доступ к мастер-странице немного.

// Master Page Code 
public event EventHandler ClearClick 
{ 
    add 
    { 
     this.btnClear.Click += value; 
    } 
    remove 
    { 
     this.btnClear.Click -= value; 
    } 
} 

// Content Page markup 
<%@ Page masterPageFile="~/MasterPage.master"%> 

<%@ MasterType virtualPath="~/MasterPage.master"%> 

// Content Page Code 
protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    this.Master.ClearClick += new EventHandler(OnClearClick); 
} 

private void OnClearClick(object sender, EventArgs e) 
{ 
    // Handle click here 
} 
+0

Я бы обескуражил создание «сквозного» события - страница никогда не должна знать об отдельных элементах или их собственных событиях в другом классе. Скорее, событие нажатия кнопки на главной странице должно означать, что произошло нечто более значимое - например, цель нажатия кнопки. –

Смежные вопросы