2011-07-06 18 views
5

Supongamos que tenemos el control de acordeón con varios botones colocados en otro control de acordeón. El problema está en el hecho de que los eventos de esos botones no se manejan en el lado del servidor. Ejemplo:Los eventos no se activan desde el control de acordeón anidado

he siguiente código:

<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> 

Codebehind:

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

Button1_OnClick método se ejecuta sólo en ButtonH clic, pero no en ButtonH2 ni ButtonContent clics. ¿Alguien tiene alguna idea de lo que extraño?

Gracias!

+0

¿Esto sucede en todos los navegadores? Es decir, ¿es el problema específico del navegador? – Abel

+0

@Abel: Esto ocurre al menos en IE 9 y FF 5.0, por lo que parece que no es específico del navegador. – Andy

+3

No estoy seguro de si esto está relacionado pero revise usted mismo: http://forums.asp.net/t/1405543.aspx/1?ImageButton+onclick+event+is+not+fired+in+AccordionPane –

Respuesta

5

Gracias a Tim Schmelter solucioné este problema.

Here is the forum post he referred to que explica los cambios que deben realizarse. Un resumen de lo que he encontrado:

La clase Accordion.cs necesita heredar de INamingContainer en la línea 46

public class Accordion : WebControl, INamingContainer` 

que se refiere el this related ASP.NET post

y el acordeón ItemCommand necesita tener la AccordionCommandEventArgs definido en el controlador de eventos en la línea 68:

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

como se menciona en this codeplex post

-1

Intente configurar el SuppressHeaderPostbacks="false". Funcionó para mí

Cuestiones relacionadas