События не запускаются из вложенного Аккордеонного контроля - PullRequest
5 голосов
/ 06 июля 2011

Предположим, у нас есть элемент управления Accordion с несколькими кнопками, помещенными в другой элемент управления Accordion. Проблема в том, что события этих кнопок не обрабатываются на стороне сервера. Пример:

У меня есть следующий код:

<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 метод выполняется только при нажатии ButtonH, но не при нажатии ButtonH2 и ButtonContent. У кого-нибудь есть идеи, что я скучаю?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 07 июля 2011

Благодаря Тиму Шмелтеру я исправил эту проблему.

Вот сообщение на форуме, на которое он сослался , в котором объясняются изменения, которые необходимо сделать. Краткое изложение того, что я нашел:

Класс Accordion.cs должен наследоваться от INamingContainer в строке 46

public class Accordion : WebControl, INamingContainer`

как упомянуто в этом связанном сообщении ASP.NET

и Аккордеон ItemCommand должен иметь AccordionCommandEventArgs, определенный в обработчике событий в строке 68:

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

как указано в этом посте с кодексом

0 голосов
/ 29 мая 2015

Попробуйте установить SuppressHeaderPostbacks="false".Это сработало для меня.

...