2011-07-06 4 views
5

Załóżmy, że mamy sterowanie akordeonem z kilkoma przyciskami umieszczonymi w innej kontrolce Accordion. Problem polega na tym, że zdarzenia tego przycisku nie są obsługiwane po stronie serwera. Przykład:Zdarzenia nie są uruchamiane z zagnieżdżonego kontrolera akordeonu

Mam następujący kod:

<form runat="server"> 
<ajax:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
</ajax:ToolkitScriptManager> 
<ajax:Accordion ID="Accordion1" runat="server" Enabled="True" Visible="true"> 
    <Panes> 
     <ajax:AccordionPane ID="AccordionPane1" runat="server"> 
      <Header> 
       header1 <asp:button id="ButtonH" runat="server" text="ButtonH" onclick="Button1_OnClick" /> 
      </Header> 
      <Content> 
       <ajax:Accordion ID="Accordion12" runat="server" Enabled="True"> 
        <Panes> 
         <ajax:AccordionPane ID="AccordionPane12" runat="server"> 
          <Header> 
           header2 
           <asp:button id="ButtonH2" runat="server" text="ButtonH2" onclick="Button1_OnClick" /> 
          </Header> 
          <Content> 
           <asp:button id="ButtonContent" runat="server" text="Content" onclick="Button1_OnClick" /> 
           content1</Content> 
         </ajax:AccordionPane> 
        </Panes> 
       </ajax:Accordion> 
      </Content> 
     </ajax:AccordionPane> 
    </Panes> 
</ajax:Accordion> 
</form> 

kodzie:

protected void Button1_OnClick(object sender, EventArgs e) 
{ 
    var button = (Button)sender; 
} 

Button1_OnClick metoda jest wykonywana tylko na ButtonH kliknięcia, ale nie na ButtonH2 ani ButtonContent kliknięć. Czy ktoś ma jakieś pomysły, za którymi tęsknię?

Dzięki!

+0

Czy dzieje się to w przypadku każdej przeglądarki? Czy jest to problem związany z przeglądarką? – Abel

+0

@Abel: Dzieje się tak przynajmniej na IE 9 i FF 5.0, więc wydaje się, że nie jest to zależne od przeglądarki. – Andy

+3

Nie jestem pewien, czy jest to powiązane, ale sprawdź sam: http://forums.asp.net/t/1405543.aspx/1?ImageButton+kliknięcie+wydarzenia+nie+nie+wymagane+w+pisieCentrum –

Odpowiedz

5

Dzięki Timowi Schmelterowi poprawiłem ten problem.

Here is the forum post he referred to który wyjaśnia zmiany, które należy wprowadzić. Podsumowanie co znalazłem:

Klasa Accordion.cs musi dziedziczyć z INamingContainer na linii 46

public class Accordion : WebControl, INamingContainer` 

, o których mowa w this related ASP.NET post

i akordeonu ItemCommand musi mieć zdefiniowany AccordionCommandEventArgs w procedurze obsługi zdarzenia w linii 68:

public event EventHandler<AccordionCommandEventArgs> ItemCommand; 
//public event CommandEventHandler ItemCommand; 

, o której mowa w this codeplex post

-1

Spróbuj ustawić SuppressHeaderPostbacks="false". To zadziałało dla mnie.