2009-06-03 13 views
5

Chcę mieć kontrolkę użytkownika zawierającą przycisk zapisu.Obsługa zdarzeń sterowania użytkownika Zdarzenia związane z zawartością Page

chcę zdarzenie click dołączony do przycisku Zapisz, aby być obsługiwane przez strony nie sterowania użytkownik zawierającej

Czy to możliwe?

EDIT BARDZIEJ SZCZEGÓŁOWE

Say Mam stronę o nazwie "Page Editor" i kontrolę użytkownika o nazwie "Przyciski Editor". W kontrolce użytkownika "Przyciski edytora" mam przycisk zapisu (który jest kontrolą sieciową). Chcę, aby zdarzenie Click przycisku zapisywania było obsługiwane przez "Stronę edytora", a nie kontrolę użytkownika.

Powodem tego jest fakt, że chcę określić strony podstawowe, które implementują typowe zachowanie.

Odpowiedz

4

Założę się, że masz kod do UserControl. W takim przypadku można zdefiniować zdarzenie Zapisz w elemencie sterującym użytkownika i udostępnić zdarzenie Click przycisku zapisywania, either directly lub wewnętrznie skonfigurować procedurę obsługi zdarzeń i podnieść zdarzenie Zapisz po kliknięciu przycisku. To mogłoby wyglądać tak w UserControl:

public event EventHandler Save; 

private void SaveButton_Click(object sender, EventArgs e) 
{ 
    OnSave(e); 
} 

protected void OnSave(EventArgs e) 
{ 
    // raise the Save event 
    EventHandler save = Save; 
    if (save != null) 
    { 
     save(this, e); 
    } 
} 
4

Technika ta jest często określana jako „zdarzenie propagacji”.

Oto exmple:

public partial class Test : System.Web.UI.UserControl 

{ 

public event EventHandler buttonClick; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    buttonClick(sender, e); 
} 

} 

Następnie można subskrybować zdarzenie buttonClick na stronie internetowej, aby wyświetlić różne informacje.

public partial class Test: System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 

UserControlID.buttonClick+=new EventHandler(UserControlID_buttonClick); 

} 

protected void UserControlID_buttonClick(object sender, EventArgs e) 
{ 
    Response.Write("hello,I am jack."); 
} 

} 
1

UserControl1.ascx

UserControl1.ascx.cs

public partial class UserControl1: System.Web.UI.UserControl

{

public event EventHandler UserControl1Click; 



protected void Page_Load(object sender, EventArgs e) 

{ 

} 



protected void btn1_Click(object sender, EventArgs e) 

{ 

    UserControl1Click(sender, e); 

} 

}

UserControl2.ascx

UserControl1.ascx.cs

Klasa publiczna częściowy UserControl2: System.Web.UI.UserControl

{

public event EventHandler UserControl2Click; 



protected void Page_Load(object sender, EventArgs e) 

{ 

} 




protected void btn2_Click(object sender, EventArgs e) 

{ 

    UserControl2Click(sender, e); 

} 

}

Następnie dodaj jedno pole tekstowe Asp.Net (aby wyświetlić identyfikator kontrolny użytkownika) i powyżej dwóch elementów sterujących użytkownika do strony Aspx, jak pokazano poniżej.

<title>Untitled Page</title> 

<form id="form1" runat="server"> 



<div> 



<asp:TextBox ID="txt1" runat="server"></asp:TextBox> <br /> 



<UC1:UC ID="uc1" runat="server" /> 



<UC1:UC ID="uc2" runat="server" /> 



</div> 



</form> 

Teraz dodać obsługi zdarzeń dla każdego użytkownika kontroli do obsługi zdarzenia kliknięcia przycisku z dwóch formantów, jak pokazano poniżej.

publicznych częściowe klasy _default: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e) 

{ 

    uc1.UserControl1Click += new EventHandler(uc1_UserControl1Click); 

    uc2.UserControl2Click += new EventHandler(uc2_UserControl2Click); 

} 



protected void uc1_UserControl1Click(object sender, EventArgs e) 

{ 

    txt1.Text = "User Control 1 Clicked"; 

} 



protected void uc2_UserControl2Click(object sender, EventArgs e) 

{ 

    txt1.Text = "User Control 2 Clicked"; 

} 

}

Jeśli klikniemy użytkownika kontroli1, wyświetlacze polu „Kontrola Użytkownik 1 lub jeśli kliknąłeś dla niej” klikamy na Kontrola użytkownika2, pole tekstowe wyświetla "Kontrola użytkownika 2 kliknięta".

Powiązane problemy